Sha256: 83685ef47d003e661ae30e2877c12ec2237f92c1608a8b179b2e17411cf1e062
Contents?: true
Size: 998 Bytes
Versions: 2
Compression:
Stored size: 998 Bytes
Contents
module LightIO::Core # 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) class Future def initialize @value = nil @ioloop = IOloop.current @state = :init end def done? @state == :done end # Transfer and set result value # # use this method to set back result def transfer(value=nil) raise Error, "state error" if done? @value = value done! @light_fiber.transfer if @light_fiber end # Get value # # this method will block current beam/fiber, until future result is set. def value return @value if done? raise Error, 'already used' if @light_fiber @light_fiber = LightFiber.current @ioloop.transfer @value end private def done! @state = :done end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
lightio-0.1.1 | lib/lightio/core/future.rb |
lightio-0.1.0 | lib/lightio/core/future.rb |