將未來的結果直接投入「自我」是否安全?管未來結果自我
在演員:
Future(hardWork()).pipeTo(self)
或者,我們必須分配給VAL:
val me = self
Future(hardWork()).pipeTo(me)
將未來的結果直接投入「自我」是否安全?管未來結果自我
在演員:
Future(hardWork()).pipeTo(self)
或者,我們必須分配給VAL:
val me = self
Future(hardWork()).pipeTo(me)
代碼中的一切都是安全的,因爲你不關閉了什麼。您只需調用常規方法pipeTo
並傳入常規參數即可。只關閉某些東西(就像你在自己的回答中所做的那樣)可能是危險的,但在self
的情況下,沒有危險,因爲self
不可變。
顯然, '自我' 是安全的,因此沒有必要爲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
是 - '隱式final val self = context.self' – sourcedelica