将Future的结果直接传递给'self'是否安全?
在演员中:
Future(hardWork()).pipeTo(self)
或者我们必须分配给val:
val me = self
Future(hardWork()).pipeTo(me)
答案 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
不可变。