utiliza tres signos signo significa que punto para orden niños interrogación interrogacion inicial exclamacion como antes admiracion scala operators akka actor

tres - Akka en Scala, signo de admiración y signo de interrogación



signos de interrogacion y exclamacion (2)

Copia desvergonzadamente [impresionante] documento oficial (mira la sección Enviar mensajes para más información):

Los mensajes se envían a un actor a través de uno de los siguientes métodos.

! significa "disparar y olvidar", por ejemplo, enviar un mensaje de forma asincrónica y regresar inmediatamente. También conocido como tell .

? envía un mensaje de forma asincrónica y devuelve un Future representa una posible respuesta. También conocido como ask .

¿Cuál es la diferencia entre un signo de exclamación ( ! ) Y un signo de interrogación ( ? ) Al enviar mensajes a Actores?

myActor ! Hello(value1) myActor ? Hello(value1)


Desde el punto de vista del destinatario, ve tell y ask mensajes de la misma manera. Sin embargo, al recibir un tell el valor del sender será la referencia del actor que envió el mensaje, mientras que para una ask , el sender se configurará de manera que cualquier respuesta vaya al Future creado en el actor que hizo la pregunta.

Hay una ventaja en ask , que es fácil saber que la respuesta que recibes fue definitivamente el resultado del mensaje que pediste, mientras que con Tell, es posible que debas usar ID únicos para lograr un resultado similar. Sin embargo, con ask , debe establecer un timeout después del cual el Future fallará si no se recibe respuesta.

En el siguiente código, el mismo efecto se logra con tell ask .

import akka.actor.{Props, Actor} import scala.concurrent.duration._ import akka.pattern.ask class TellActor extends Actor { val recipient = context.actorOf(Props[ReceiveActor]) def receive = { case "Start" => recipient ! "Hello" // equivalent to recipient.tell("hello", self) case reply => println(reply) } } class AskActor extends Actor { val recipient = context.actorOf(Props[ReceiveActor]) def receive = { case "Start" => implicit val timeout = 3 seconds val replyF = recipient ? "Hello" // equivalent to recipient.ask("Hello") replyF.onSuccess{ case reply => println(reply) } } } class ReceiveActor extends Actor { def receive = { case "Hello" => sender ! "And Hello to you!" } }