阅读Scala文档时,我很难理解ask和tell之间的区别。
http://doc.akka.io/docs/akka/snapshot/scala/actors.html中写道:
! 表示“fire-and-forget”,例如异步发送消息并立即返回。也称为 tell。
? 异步发送消息并返回表示可能回复的Future。也称为 ask。
如果我使用的Actor生成了一个Web请求,那么ask和tell之间有什么区别?在两种情况下,请求将被异步生成并必须等待响应,换句话说,如果Actor调用Web服务并等待响应,那么“tell”如何立即返回?
tell
返回Unit
,也就是什么都没有,因此不需要返回值。ask
返回一个Future[Any]
,可以被await
,或者被传递给另一个 actor,或者被map
到一个回调函数中执行。ask
更加复杂,并且通过隐式转换为akka.pattern.AskableActorRef
实现。 - Richard Close