Class: Async::WorkerPool::Promise
- Inherits:
-
Object
- Object
- Async::WorkerPool::Promise
- Defined in:
- lib/async/worker_pool.rb
Overview
Execute the given work in a background thread.
Instance Method Summary collapse
-
#call ⇒ Object
Execute the work and resolve the promise.
-
#cancel ⇒ Object
Cancel the work and raise an exception in the background thread.
-
#initialize(work) ⇒ Promise
constructor
Create a new promise.
-
#wait ⇒ Object
Wait for the work to be done.
Constructor Details
#initialize(work) ⇒ Promise
Create a new promise.
32 33 34 35 36 37 38 39 |
# File 'lib/async/worker_pool.rb', line 32 def initialize(work) @work = work @state = :pending @value = nil @guard = ::Mutex.new @condition = ::ConditionVariable.new @thread = nil end |
Instance Method Details
#call ⇒ Object
Execute the work and resolve the promise.
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/async/worker_pool.rb', line 42 def call work = nil @guard.synchronize do @thread = ::Thread.current return unless work = @work end resolve(work.call) rescue Exception => error reject(error) end |
#cancel ⇒ Object
Cancel the work and raise an exception in the background thread.
77 78 79 80 81 82 83 84 85 |
# File 'lib/async/worker_pool.rb', line 77 def cancel return unless @work @guard.synchronize do @work = nil @state = :cancelled @thread&.raise(Interrupt) end end |
#wait ⇒ Object
Wait for the work to be done.
90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/async/worker_pool.rb', line 90 def wait @guard.synchronize do while @state == :pending @condition.wait(@guard) end if @state == :failed raise @value else return @value end end end |