class LightIO::Core::Future
Provide a safe way to transfer beam/fiber control flow.
@Example:
future = Future.new # future#value will block current beam Beam.new{future.value} # use transfer to set value future.transfer(1)
Public Class Methods
new()
click to toggle source
# File lib/lightio/core/future.rb, line 11 def initialize @value = nil @ioloop = IOloop.current @state = :init @light_fiber = nil end
Public Instance Methods
done?()
click to toggle source
# File lib/lightio/core/future.rb, line 18 def done? @state == :done end
transfer(value=nil)
click to toggle source
Transfer and set result value
use this method to set back result
# File lib/lightio/core/future.rb, line 25 def transfer(value=nil) raise LightIO::Error, "state error" if done? @value = value done! @light_fiber.transfer if @light_fiber end
value()
click to toggle source
Get value
this method will block current beam/fiber, until future result is set.
# File lib/lightio/core/future.rb, line 39 def value return @value if done? raise LightIO::Error, 'already used' if @light_fiber @light_fiber = LightFiber.current @ioloop.transfer @value end
value=(value)
click to toggle source
# File lib/lightio/core/future.rb, line 32 def value=(value) transfer(value) end
Private Instance Methods
done!()
click to toggle source
# File lib/lightio/core/future.rb, line 49 def done! @state = :done end