class Concurrent::Promises::FlatEventPromise

Public Class Methods

new(delayed, blockers_count, default_executor) click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1833
def initialize(delayed, blockers_count, default_executor)
  super delayed, 2, Event.new(self, default_executor)
end

Private Instance Methods

process_on_blocker_resolution(future, index) click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1837
def process_on_blocker_resolution(future, index)
  countdown = super(future, index)
  if countdown.nonzero?
    internal_state = future.internal_state

    unless internal_state.fulfilled?
      resolve_with RESOLVED
      return countdown
    end

    value = internal_state.value
    case value
    when AbstractEventFuture
      add_delayed_of value
      value.add_callback_notify_blocked self, nil
      countdown
    else
      resolve_with RESOLVED
    end
  end
  countdown
end