Class: Concurrent::Promises::AbstractEventFuture

Inherits:
Synchronization::Object show all
Defined in:
lib/concurrent-ruby/concurrent/promises.rb

Overview

Common ancestor of Event and Future classes, many shared methods are defined here.

Direct Known Subclasses

Event, Future

Instance Method Summary collapse

Methods inherited from Synchronization::Object

atomic_attribute?, atomic_attributes, attr_atomic, attr_volatile, ensure_safe_initialization_when_final_fields_are_present, safe_initialization!, safe_initialization?

Instance Method Details

#chain(*args, &task) ⇒ Future

Shortcut of #chain_on with default ‘:io` executor supplied.

Returns:

See Also:



594
595
596
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 594

def chain(*args, &task)
  chain_on @DefaultExecutor, *args, &task
end

#an_event.chain_on(executor, *args) {|*args| ... } ⇒ Future #a_future.chain_on(executor, *args) {|fulfilled, value, reason, *args| ... } ⇒ Future

Chains the task to be executed asynchronously on executor after it is resolved.

Overloads:

  • #an_event.chain_on(executor, *args) {|*args| ... } ⇒ Future

    Yields:

    • (*args)

      to the task.

  • #a_future.chain_on(executor, *args) {|fulfilled, value, reason, *args| ... } ⇒ Future

    Yields:

    • (fulfilled, value, reason, *args)

      to the task.

    Yield Parameters:

    • fulfilled (true, false)
    • value (Object)
    • reason (Object)

Parameters:

  • executor (Executor, :io, :fast)

    Instance of an executor or a name of the global executor. The task is executed on it, default executor remains unchanged.

  • args (Object)

    arguments which are passed to the task when it’s executed. (It might be prepended with other arguments, see the @yeild section).

Yield Returns:

  • will become result of the returned Future. Its returned value becomes Future#value fulfilling it, raised exception becomes Future#reason rejecting it.

Returns:



612
613
614
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 612

def chain_on(executor, *args, &task)
  ChainPromise.new_blocked_by1(self, @DefaultExecutor, executor, args, &task).future
end

#chain_resolvable(resolvable) ⇒ self Also known as: tangle

Resolves the resolvable when receiver is resolved.

Parameters:

Returns:

  • (self)


627
628
629
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 627

def chain_resolvable(resolvable)
  on_resolution! { resolvable.resolve_with internal_state }
end

#default_executorExecutor

Returns default executor.



588
589
590
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 588

def default_executor
  @DefaultExecutor
end

#internal_stateObject

Returns The internal_state.

Returns:

  • (Object)

    The internal_state.



513
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 513

attr_atomic(:internal_state)

#on_resolution(*args, &callback) ⇒ self

Shortcut of #on_resolution_using with default ‘:io` executor supplied.

Returns:

  • (self)

See Also:



635
636
637
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 635

def on_resolution(*args, &callback)
  on_resolution_using @DefaultExecutor, *args, &callback
end

#an_event.on_resolution!(*args) {|*args| ... } ⇒ self #a_future.on_resolution!(*args) {|fulfilled, value, reason, *args| ... } ⇒ self

Stores the callback to be executed synchronously on resolving thread after it is resolved.

Overloads:

  • #an_event.on_resolution!(*args) {|*args| ... } ⇒ self

    Yields:

    • (*args)

      to the callback.

  • #a_future.on_resolution!(*args) {|fulfilled, value, reason, *args| ... } ⇒ self

    Yields:

    • (fulfilled, value, reason, *args)

      to the callback.

    Yield Parameters:

    • fulfilled (true, false)
    • value (Object)
    • reason (Object)

Parameters:

  • args (Object)

    arguments which are passed to the task when it’s executed. (It might be prepended with other arguments, see the @yeild section).

Yield Returns:

  • is forgotten.

Returns:

  • (self)


653
654
655
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 653

def on_resolution!(*args, &callback)
  add_callback :callback_on_resolution, args, callback
end

#an_event.on_resolution_using(executor, *args) {|*args| ... } ⇒ self #a_future.on_resolution_using(executor, *args) {|fulfilled, value, reason, *args| ... } ⇒ self

Stores the callback to be executed asynchronously on executor after it is resolved.

Overloads:

  • #an_event.on_resolution_using(executor, *args) {|*args| ... } ⇒ self

    Yields:

    • (*args)

      to the callback.

  • #a_future.on_resolution_using(executor, *args) {|fulfilled, value, reason, *args| ... } ⇒ self

    Yields:

    • (fulfilled, value, reason, *args)

      to the callback.

    Yield Parameters:

    • fulfilled (true, false)
    • value (Object)
    • reason (Object)

Parameters:

  • executor (Executor, :io, :fast)

    Instance of an executor or a name of the global executor. The task is executed on it, default executor remains unchanged.

  • args (Object)

    arguments which are passed to the task when it’s executed. (It might be prepended with other arguments, see the @yeild section).

Yield Returns:

  • is forgotten.

Returns:

  • (self)


671
672
673
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 671

def on_resolution_using(executor, *args, &callback)
  add_callback :async_callback_on_resolution, executor, args, callback
end

#pending?Boolean

Is it in pending state?

Returns:

  • (Boolean)


547
548
549
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 547

def pending?
  !internal_state.resolved?
end

#resolved?Boolean

Is it in resolved state?

Returns:

  • (Boolean)


553
554
555
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 553

def resolved?
  internal_state.resolved?
end

#an_event.state:pending, :resolved #a_future.state:pending, ...

Returns its state.

Overloads:

  • #an_event.state:pending, :resolved

    Returns:

    • (:pending, :resolved)
  • #a_future.state:pending, ...

    Both :fulfilled, :rejected implies :resolved.

    Returns:

    • (:pending, :fulfilled, :rejected)

Returns:

  • (Symbol)


541
542
543
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 541

def state
  internal_state.to_sym
end

#to_sString Also known as: inspect

Returns Short string representation.

Returns:

  • (String)

    Short string representation.



617
618
619
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 617

def to_s
  format '%s %s>', super[0..-2], state
end

#touchself

Propagates touch. Requests all the delayed futures, which it depends on, to be executed. This method is called by any other method requiring resolved state, like #wait.

Returns:

  • (self)


560
561
562
563
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 560

def touch
  @Promise.touch
  self
end

#wait(timeout = nil) ⇒ self, ...

Note:

This function potentially blocks current thread until the Future is resolved. Be careful it can deadlock. Try to chain instead.

Wait (block the Thread) until receiver is #resolved?. Calls AbstractEventFuture#touch.

Parameters:

  • timeout (Numeric) (defaults to: nil)

    the maximum time in second to wait.

Returns:

  • (self, true, false)

    self implies timeout was not used, true implies timeout was used and it was resolved, false implies it was not resolved within timeout.



576
577
578
579
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 576

def wait(timeout = nil)
  result = wait_until_resolved(timeout)
  timeout ? result : self
end

#with_default_executor(executor) ⇒ AbstractEventFuture

This method is abstract.

Crates new object with same class with the executor set as its new default executor. Any futures depending on it will use the new default executor.

Returns:

Raises:

  • (NotImplementedError)

See Also:



681
682
683
# File 'lib/concurrent-ruby/concurrent/promises.rb', line 681

def with_default_executor(executor)
  raise NotImplementedError
end