Class: Concurrent::Promises::AbstractFlatPromise
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Subclasses:
|
|
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
|
Instance Chain:
|
|
| Inherits: | Concurrent::Promises::BlockedPromise |
| Defined in: | lib/concurrent-ruby/concurrent/promises.rb |
Constant Summary
InternalStates - Included
Class Attribute Summary
Synchronization::Object - Inherited
Class Method Summary
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
- #touched? ⇒ Boolean readonly private
Instance Method Summary
- #touch
- #add_delayed_of(future) private
- #on_resolvable(resolved_future, index) private
- #resolvable?(countdown, future, index) ⇒ Boolean private
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_because, blockers_count, event_or_future) ⇒ AbstractFlatPromise
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1798
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
Instance Attribute Details
#touched? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1816
def touched? @Touched.value end
Instance Method Details
#add_delayed_of(future) (private)
[ GitHub ]# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1828
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) (private)
[ GitHub ]# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1820
def on_resolvable(resolved_future, index) resolve_with resolved_future.internal_state end
#resolvable?(countdown, future, index) ⇒ Boolean (private)
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1824
def resolvable?(countdown, future, index) !@Future.internal_state.resolved? && super(countdown, future, index) end
#touch
[ GitHub ]# File 'lib/concurrent-ruby/concurrent/promises.rb', line 1808
def touch if @Touched.make_true clear_and_propagate_touch @DelayedBecause end end