在我的项目中,我使用Akka的演员。通过定义演员是线程安全的,这意味着,在演员的接收方法Akka的演员异步消息处理
def receive = {
case msg =>
// some logic here
}
一次仅一个线程处理的注释一段代码。然而,事情开始变得更加复杂时,这种代码是异步的:
def receive = {
case msg =>
Future {
// some logic here
}
}
如果我理解这个正确的,在这种情况下,只有未来的结构将同步,可以这么说,而不是内部逻辑未来。
当然,我可能会阻止未来:
def receive = {
case msg =>
val future = Future {
// some logic here
}
Await.result(future, 10.seconds)
}
解决了这个问题,但我认为我们都应该同意,这是难以接受的解决方案。
所以这是我的问题:如何在异步计算的情况下保留演员的线程安全特性没有阻止Scala的未来?
在http://docs.scala-lang.org/overviews/core/futures.html描述只需添加一个回调到未来。回叫应该向这个或另一个演员发送消息。 –