Class: Concurrent::Promises::FlatFuturePromise
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
|
|
Inherits: | Concurrent::Promises::AbstractFlatPromise |
Defined in: | lib/concurrent-ruby/concurrent/promises.rb |
Constant Summary
InternalStates
- Included
Class Attribute Summary
Synchronization::Object
- Inherited
Class Method Summary
- .new(delayed, blockers_count, levels, default_executor) ⇒ FlatFuturePromise constructor private
AbstractFlatPromise
- Inherited
BlockedPromise
- Inherited
AbstractPromise
- Inherited
Synchronization::Object
- Inherited
.atomic_attribute?, .atomic_attributes, | |
.attr_atomic | Creates methods for reading and writing to a instance variable with volatile (Java) semantic as |
.attr_volatile | Creates methods for reading and writing (as |
.ensure_safe_initialization_when_final_fields_are_present | For testing purposes, quite slow. |
.new | Has to be called by children. |
.safe_initialization!, .define_initialize_atomic_fields |
Synchronization::AbstractObject
- Inherited
Instance Attribute Summary
AbstractFlatPromise
- Inherited
Instance Method Summary
AbstractFlatPromise
- Inherited
BlockedPromise
- Inherited
#blocked_by | for inspection only. |
#delayed_because, #on_blocker_resolution, #touch, #clear_and_propagate_touch, #on_resolvable, #process_on_blocker_resolution, #resolvable? |
AbstractPromise
- Inherited
#default_executor, #delayed_because, | |
#event | Alias for AbstractPromise#future. |
#future, | |
#inspect | Alias for AbstractPromise#to_s. |
#state, #to_s, #touch, #evaluate_to, #resolve_with |
Synchronization::Object
- Inherited
Synchronization::Volatile
- Included
Synchronization::AbstractObject
- Inherited
Constructor Details
.new(delayed, blockers_count, levels, default_executor) ⇒ FlatFuturePromise
(private)
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1877
def initialize(delayed, blockers_count, levels, default_executor) raise ArgumentError, 'levels has to be higher than 0' if levels < 1 # flat promise may result to a future having delayed futures, therefore we have to have empty stack # to be able to add new delayed futures super delayed || LockFreeStack.new, 1 + levels, Future.new(self, default_executor) end
Instance Method Details
#process_on_blocker_resolution(future, index) (private)
[ GitHub ]# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1884
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 internal_state return countdown end value = internal_state.value case value when AbstractEventFuture add_delayed_of value value.add_callback_notify_blocked self, nil countdown else evaluate_to(lambda { raise TypeError, "returned value #{value.inspect} is not a Future" }) end end countdown end