class Concurrent::Promises::AbstractFlatPromise
Public Class Methods
new(delayed_because, blockers_count, event_or_future)
click to toggle source
Calls superclass method
Concurrent::Promises::BlockedPromise::new
# File lib/concurrent-ruby/concurrent/promises.rb, line 1788 def initialize(delayed_because, blockers_count, event_or_future) delayed = LockFreeStack.of1(self) super(delayed, blockers_count, event_or_future) # noinspection RubyArgCount @Touched = AtomicBoolean.new false @DelayedBecause = delayed_because || LockFreeStack.new event_or_future.add_callback_clear_delayed_node delayed.peek end
Public Instance Methods
touch()
click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1798 def touch if @Touched.make_true clear_and_propagate_touch @DelayedBecause end end
Private Instance Methods
add_delayed_of(future)
click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1818 def add_delayed_of(future) delayed = future.promise.delayed_because if touched? clear_and_propagate_touch delayed else BlockedPromise.add_delayed @DelayedBecause, delayed clear_and_propagate_touch @DelayedBecause if touched? end end
on_resolvable(resolved_future, index)
click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1810 def on_resolvable(resolved_future, index) resolve_with resolved_future.internal_state end
resolvable?(countdown, future, index)
click to toggle source
Calls superclass method
Concurrent::Promises::BlockedPromise#resolvable?
# File lib/concurrent-ruby/concurrent/promises.rb, line 1814 def resolvable?(countdown, future, index) !@Future.internal_state.resolved? && super(countdown, future, index) end
touched?()
click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1806 def touched? @Touched.value end