Class: Concurrent::ErlangActor::Pid
- Inherits:
-
Synchronization::Object
- Object
- Synchronization::Object
- Concurrent::ErlangActor::Pid
- Defined in:
- lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb
Overview
The public reference of the actor which can be stored and passed around. Nothing else of the actor should be exposed. Functions#spawn_actor and Environment#spawn return the pid.
Instance Method Summary collapse
-
#ask(message, timeout = nil, timeout_value = nil) ⇒ Object, timeout_value
The actor is asked the message and blocks until a reply is available, which is returned by the method.
-
#ask_op(message, probe = Promises.resolvable_future) ⇒ Promises::Future(Object)
Same as #tell but represented as a Promises::Future.
-
#name ⇒ #to_s, nil
Optional name of the actor.
-
#tell(message, timeout = nil) ⇒ self, true, false
The actor is asynchronously told a message.
-
#tell_op(message) ⇒ Promises::Future(self)
Same as #tell but represented as a Promises::Future.
-
#terminated ⇒ Promises::Future
A future which is resolved with the final result of the actor that is either the reason for termination or a value if terminated normally.
-
#to_s ⇒ String
(also: #inspect)
String representation.
Instance Method Details
#ask(message, timeout = nil, timeout_value = nil) ⇒ Object, timeout_value
The actor is asked the message and blocks until a reply is available, which is returned by the method. If the reply is a rejection then the methods raises it.
If the actor does not call Environment#reply or Environment#reply_resolution the method will raise NoReply error. If the actor is terminated it will raise NoActor. Therefore the ask is never left unanswered and blocking.
73 74 75 |
# File 'lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb', line 73 def ask(, timeout = nil, timeout_value = nil) @Actor.ask , timeout, timeout_value end |
#ask_op(message, probe = Promises.resolvable_future) ⇒ Promises::Future(Object)
Same as #tell but represented as a Promises::Future.
82 83 84 |
# File 'lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb', line 82 def ask_op(, probe = Promises.resolvable_future) @Actor.ask_op , probe end |
#name ⇒ #to_s, nil
Returns optional name of the actor.
95 96 97 |
# File 'lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb', line 95 def name @Name end |
#tell(message, timeout = nil) ⇒ self, true, false
The actor is asynchronously told a message. The method returns immediately unless the actor has bounded mailbox and there is no more space for the message. Then the method blocks current thread until there is space available. This is useful for backpressure.
48 49 50 |
# File 'lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb', line 48 def tell(, timeout = nil) @Actor.tell , timeout end |
#tell_op(message) ⇒ Promises::Future(self)
Same as #tell but represented as a Promises::Future.
55 56 57 |
# File 'lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb', line 55 def tell_op() @Actor.tell_op() end |
#terminated ⇒ Promises::Future
Returns a future which is resolved with the final result of the actor that is either the reason for termination or a value if terminated normally.
90 91 92 |
# File 'lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb', line 90 def terminated @Actor.terminated end |
#to_s ⇒ String Also known as: inspect
Returns string representation.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/concurrent-ruby-edge/concurrent/edge/erlang_actor.rb', line 100 def to_s original = super state = case terminated.state when :pending 'running' when :fulfilled "terminated normally with #{terminated.value}" when :rejected "terminated because of #{terminated.reason}" else raise end [original[0..-2], *@Name, state].join(' ') << '>' end |