class Concurrent::Edge::ZipPromise
@!visibility private
Public Class Methods
new(blocked_by_futures, default_executor)
click to toggle source
Calls superclass method
Concurrent::Edge::BlockedPromise.new
# File lib/concurrent/edge/future.rb, line 1263 def initialize(blocked_by_futures, default_executor) klass = Event blocked_by_futures.each do |f| if f.is_a?(Future) if klass == Event klass = Future break end end end # noinspection RubyArgCount super(klass.new(self, default_executor), blocked_by_futures, blocked_by_futures.size) if blocked_by_futures.empty? on_completable nil end end
Private Instance Methods
on_completable(done_future)
click to toggle source
# File lib/concurrent/edge/future.rb, line 1282 def on_completable(done_future) all_success = true values = [] reasons = [] blocked_by.each do |future| next unless future.is_a?(Future) success, value, reason = future.result unless success all_success = false end values << value reasons << reason end if all_success if values.empty? complete_with Event::COMPLETED else if values.size == 1 complete_with Future::Success.new(values.first) else complete_with Future::SuccessArray.new(values) end end else complete_with Future::PartiallyFailed.new(values, reasons) end end