Class: QuackConcurrency::Future
- Inherits:
-
ConcurrencyTool
- Object
- ConcurrencyTool
- QuackConcurrency::Future
- Defined in:
- lib/quack_concurrency/future.rb,
lib/quack_concurrency/future/canceled.rb,
lib/quack_concurrency/future/complete.rb
Defined Under Namespace
Instance Method Summary collapse
-
#cancel ⇒ void
Cancels the future.
-
#complete? ⇒ Boolean
Checks if future has a value or is canceled.
-
#get ⇒ Object
Gets the value of the future.
-
#initialize(duck_types: nil) ⇒ Future
constructor
Creates a new
Futureconcurrency tool. -
#set(new_value = nil) ⇒ void
Sets the value of the future.
Methods inherited from ConcurrencyTool
Constructor Details
#initialize(duck_types: nil) ⇒ Future
Creates a new Future concurrency tool.
8 9 10 11 12 13 14 15 |
# File 'lib/quack_concurrency/future.rb', line 8 def initialize(duck_types: nil) classes = setup_duck_types(duck_types) @condition_variable = classes[:condition_variable].new @mutex = classes[:mutex].new @value = nil @value_set = false @complete = false end |
Instance Method Details
#cancel ⇒ void
This method returns an undefined value.
Cancels the future.
20 21 22 23 24 25 26 27 |
# File 'lib/quack_concurrency/future.rb', line 20 def cancel @mutex.synchronize do raise Complete if @complete @complete = true @condition_variable.broadcast end nil end |
#complete? ⇒ Boolean
Checks if future has a value or is canceled.
31 32 33 |
# File 'lib/quack_concurrency/future.rb', line 31 def complete? @complete end |
#get ⇒ Object
Note:
This method will block until the future has completed.
Gets the value of the future.
39 40 41 42 43 44 45 46 |
# File 'lib/quack_concurrency/future.rb', line 39 def get @mutex.synchronize do @condition_variable.wait(@mutex) unless complete? raise 'internal error, invalid state' unless complete? raise Canceled unless @value_set @value end end |
#set(new_value = nil) ⇒ void
This method returns an undefined value.
Sets the value of the future.
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/quack_concurrency/future.rb', line 52 def set(new_value = nil) @mutex.synchronize do raise Complete if @complete @value_set = true @complete = true @value = new_value @condition_variable.broadcast end nil end |