class Concurrent::Promises::BlockedPromise

def self.new_blocked_by(blockers, *args, &block)

def self.new_blocked_by(blockers, *args, &block)
  delayed = blockers.reduce(nil) { |d, f| add_delayed d, f.promise.delayed_because }
  promise = new(delayed, blockers.size, *args, &block)
  blockers.each_with_index { |f, i| f.add_callback_notify_blocked promise, i }
  promise
end