【发布时间】:2020-08-21 17:21:37
【问题描述】:
我有一个 akka actor,它按顺序做一些事情,可以这样总结:
def receive = {
case Request(...) => {
val id = generatedId()
sender() ! id
doSomeOtherStuffs()
}
}
使用一些ask模式调用actor
val id = myActor ? Request(...)
这里的问题是调用我的演员的代码正在等待所有 doSomeOtherStuffs() 事情完成。
让演员回复然后让调用代码停止等待该演员的正确方法是什么?
【问题讨论】:
-
我不认为客户端(特别是
ask/?调用)应该等待doSomeOtherStuffs()完成,它应该能够继续(即未来应该完成)一旦获得id。你能发布一个更完整的例子吗? -
我不是 akka 方面的专家,但我想如果你有自定义线程池配置并且池中只有一个线程可用,那么可能会发生这种情况。
-
为什么你希望发件人等待来自 doSomeOtherStuffs() 的结果,而你已经向他们发送了 id? 1. 因为你发回了id,所以发件人不会再等了。这与您编写的代码相对应是正确的。 2. 如果那真的是你想要的。为什么不只在 doSomeOtherStuffs() 完成其工作后将 id 发回给发件人?
标签: scala playframework akka actor