public class ActorDSL$ extends java.lang.Object implements Inbox, Creators
For the communication of non-actor code with actors, you may use anonymous actors tailored to this job:
import ActorDSL._
import scala.concurrent.util.duration._
implicit val system: ActorSystem = ...
implicit val i = inbox()
someActor ! someMsg // replies will go to `i`
val reply = i.receive()
val transformedReply = i.select(5 seconds) {
case x: Int => 2 * x
}
The receive
and select
methods are synchronous, i.e. they block the
calling thread until an answer from the actor is received or the timeout
expires. The default timeout is taken from configuration item
akka.actor.dsl.default-timeout
.
When defining actors in the REPL, say, you may want to have a look at the
Act
trait:
import ActorDSL._
val system: ActorSystem = ...
val a = actor(system, "fred")(new Act {
val b = actor("barney")(new Act {
...
})
become {
case msg => ...
}
})
Note that actor
can be used with an implicit ActorRefFactory
as shown with "barney"
(where the ActorContext
serves this
purpose), but since nested declarations share the same
lexical context "fred"
’s ActorContext would be ambiguous
if the ActorSystem
were declared implicit
(this could also
be circumvented by shadowing the name system
within "fred"
).
Note: If you want to use an Act with Stash
, you should use the
ActWithStash
trait in order to have the actor get the necessary deque-based
mailbox setting.
Inbox.Get, Inbox.Get$, Inbox.Inbox, Inbox.InboxExtension, Inbox.Kick$, Inbox.Query, Inbox.Select, Inbox.Select$, Inbox.StartWatch, Inbox.StartWatch$
Creators.Act, Creators.ActWithStash
Modifier and Type | Field and Description |
---|---|
static ActorDSL$ |
MODULE$
Static reference to the singleton instance of this Scala object.
|
Constructor and Description |
---|
ActorDSL$() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
inbox, senderFromInbox
public static final ActorDSL$ MODULE$