class Rx::Concurrent::Future

Constants

ALLOWED_STATES

Attributes

channel[R]
error[R]
state[R]
work[R]

Public Class Methods

execute(&block) click to toggle source
# File lib/rx/concurrent/future.rb, line 13
def self.execute(&block)
  Future.new(&block).execute
end
new(&block) click to toggle source
# File lib/rx/concurrent/future.rb, line 21
def initialize(&block)
  @channel = Queue.new
  @state = :pending
  @work = block
end
thread_pool() click to toggle source
# File lib/rx/concurrent/future.rb, line 17
def self.thread_pool
  @@pool
end

Public Instance Methods

completed?() click to toggle source
# File lib/rx/concurrent/future.rb, line 27
def completed?
  state == :completed
end
execute() click to toggle source
# File lib/rx/concurrent/future.rb, line 31
def execute
  @state = :in_progress
  pool.submit do
    begin
      channel << work.call
      @state = :completed
    rescue StandardError => ex
      @error = ex
      @state = :failed
      channel.close
    end
  end

  self
end
failed?() click to toggle source
# File lib/rx/concurrent/future.rb, line 47
def failed?
  state == :failed
end
in_progress?() click to toggle source
# File lib/rx/concurrent/future.rb, line 51
def in_progress?
  state == :in_progress
end
pending?() click to toggle source
# File lib/rx/concurrent/future.rb, line 55
def pending?
  state == :pending
end
value() click to toggle source
# File lib/rx/concurrent/future.rb, line 59
def value
  if (completed? || failed?) && channel.empty?
    return @value
  end

  @value = channel.pop
end

Private Instance Methods

pool() click to toggle source
# File lib/rx/concurrent/future.rb, line 70
def pool
  @@pool
end