在我的项目中,我使用Akka的Actors。根据定义,Actors是线程安全的,这意味着在Actor的receive方法中,它们可以处理多个消息而不会出现竞争条件。
如果我理解正确的话,在这种情况下只有Future构造将被同步,而不是Future内部的逻辑。
当然,我可以阻止Future:
def receive = {
case msg =>
// some logic here
}
每次只有一个线程处理被注释的代码块。然而,当该代码为异步时,情况开始变得更加复杂:
def receive = {
case msg =>
Future {
// some logic here
}
}
如果我理解正确的话,在这种情况下只有Future构造将被同步,而不是Future内部的逻辑。
当然,我可以阻止Future:
def receive = {
case msg =>
val future = Future {
// some logic here
}
Await.result(future, 10.seconds)
}
这个方案虽然解决了问题,但我认为我们都应该达成一个共识:这几乎不是一个可以接受的解决方案。
因此我的问题是:如何在异步计算的情况下保持Actor的线程安全性,而不会阻塞Scala的Futures?