簡體   English   中英

如何與Akka中的發件人ActorRef一起使用

[英]How to work with the sender ActorRef in akka

很久以前,我學到了以下代碼:

def doSome(ref: ActorRef, msg: AnyRef): Unit = {
  ... some routine ...

  ref ! msg
}

def receive = {
  case x: Foo => doSome(sender(), x)
}

一定是

...

def receive = {
  case x: Foo => 
    val s = sender()
    doSome(s, x)
}

因為sender()是一個函數,在應用之前有人可能會更改context.sender()的值

問題1 :非Future功能是否存在真理? 還是可以像第一個變體一樣安全地編寫?

問題2 :有什么寫法嗎?

def receive = {
  case x: Foo => sendrer() {s => doSome(s, x)}
}

只要執行給定消息的接收行為, sender()的結果將保持不變。

因此,請回答您的第一個問題:是的,只要您願意,就可以像第一個變體一樣安全地進行操作

  1. 不要將sender()返回的值分配給actor內的字段
  2. 將價值傳遞給演員以外的某個地方

但是,我不建議將sender()的結果分配給變量。 相反,我建議調用sender()並直接向它發送一條消息(這是我對問題2的回答):

def receive = {
  case x: Foo => doSome(x)
}

def doSome(msg: Foo) = {
  // your logic here
  sender() ! msg
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM