lib/async/variable.rb in async-2.12.1 vs lib/async/variable.rb in async-2.13.0
- old
+ new
@@ -4,34 +4,50 @@
# Copyright, 2021-2022, by Samuel Williams.
require_relative 'condition'
module Async
+ # A synchronization primitive that allows one task to wait for another task to resolve a value.
class Variable
+ # Create a new variable.
+ #
+ # @parameter condition [Condition] The condition to use for synchronization.
def initialize(condition = Condition.new)
@condition = condition
@value = nil
end
+ # Resolve the value.
+ #
+ # Signals all waiting tasks.
+ #
+ # @parameter value [Object] The value to resolve.
def resolve(value = true)
@value = value
condition = @condition
@condition = nil
self.freeze
condition.signal(value)
end
+ # Whether the value has been resolved.
+ #
+ # @returns [Boolean] Whether the value has been resolved.
def resolved?
@condition.nil?
end
+ # Wait for the value to be resolved.
+ #
+ # @returns [Object] The resolved value.
def value
@condition&.wait
return @value
end
+ # Alias for {#value}.
def wait
self.value
end
end
end