管道未来的结果是自我

时间:2014-01-17 09:01:52

标签: akka

将Future的结果直接传递给'self'是否安全?

在演员中:

Future(hardWork()).pipeTo(self)

或者我们必须分配给val:

val me = self
Future(hardWork()).pipeTo(me)

2 个答案:

答案 0 :(得分:3)

显然'自我'是安全的,所以不需要val me = self

// Completely safe, "self" is OK to close over
// and it's an ActorRef, which is thread-safe
Future { expensiveCalculation() } onComplete { f => self ! f.value.get }

http://doc.akka.io/docs/akka/2.2.3/general/jmm.html#Actors_and_shared_mutable_state

答案 1 :(得分:3)

代码中的所有内容都是安全的,因为您没有关闭任何内容。您只是调用常规方法pipeTo并传入常规参数。只关闭某些东西(就像你在自己的答案中所做的那样)可能是危险的,但在self的情况下,没有危险因为self不可变。