我正在使用带有超时的ask模式向我的actor发送消息,这可能需要很长时间才能处理它。如果超时到期,我想停止处理该消息。但是,似乎演员一直在处理这个消息,我收到一封死信。
如何在超时到期时阻止演员处理消息?
答案 0 :(得分:3)
简短的回答是,你不能。一旦开始处理它,发送Kill或Poison Pill或停止它只会阻止它处理未来的消息。很长的答案是,如果演员恰好处于某种类型的循环中并且正在检查一些可变的(并且可能是全局可用的)信号以停止循环,那么你可以解决这个问题,但是这种方法有很多红旗。你应该忘记我甚至提到过它。如果长时间的呼叫恰好是对数据库这样的东西的阻塞,那么就忘了它;你被困住直到那个电话完成(或者如果你运气好的话就超时)。
演员本身并不知道有人通过ask
调用了它,并且有一个Future
上游可能会超时。它没有这个概念,因此当Future
超时时无法做出相应的反应。