[SCALA] 미래의 내 보낸
SCALA미래의 내 보낸
나는 메시지를 수신에, 파일에 대한 파일 시스템을 검색하고 파일의 전체 경로를 반환하는 배우가있다.
비동기를 유지하기 위해, 내가 행한 :
def receive = {
case s:String => {
val f = future{
val ans = search(s)
println("Input Request: "+s+" output:"+ans+" "+sender.path)
}
f.onComplete{
case Success(x) => sender ! x
case Failure(y) => println("Could not complete it")
}
}
}
// 파일 시스템 / deadLetters하지 보낸 사람 :하지만이 akka에 메시지를 반환하는 것을 관찰했다. 문서는 말한다 :
그래서 나는 반드시 동기를 유지해야한다, 의미합니까? 다른 방법이 있습니까?
해결법
-
==============================
1.당신은 "가변 상태 이상 닫기"매우 일반적인 실수를하고있다. 당신의 onComplete에 전달 폐쇄는 onComplete를가 호출 될 때, 당신이 this.sender 해당 시간에 지점에 무슨 일이 생기면에 메시지를 보내는, this.sender의 카피를 작성하지 않습니다, 당신이 만들 때 지적하지 무엇 폐쇄.
당신은 "가변 상태 이상 닫기"매우 일반적인 실수를하고있다. 당신의 onComplete에 전달 폐쇄는 onComplete를가 호출 될 때, 당신이 this.sender 해당 시간에 지점에 무슨 일이 생기면에 메시지를 보내는, this.sender의 카피를 작성하지 않습니다, 당신이 만들 때 지적하지 무엇 폐쇄.
당신은 this.sender의 현재 내용의 자신의 지역, 불변의 복사본을 만들어이 문제를 방지하고, 폐쇄에 그 값을 참조 할 수 있습니다 :
val origSender = sender f.onComplete { case Successs(x) => origSender ! x ... }
-
==============================
2.
import akka.pattern.pipe
트릭을 수행합니다. 하기:
val reply = sender future { val ans = searchAndCache(s) println("Input Request: "+s+" output:"+ans+" "+reply.path) ans } pipeTo reply
응답은 발신자에게 다시
-
==============================
3.나는 이것이 오래 알고 있지만이를 추가 할 수있어, pipeTo 올바른 방법입니다하지만 당신은 당신의 보낸 사람을 복사 할 필요가 없습니다, 동일한 맥락에서 이미입니다. 실제로 pipeTo 당신을 위해이 작업을 수행합니다. 그것은 (그것의 인수에 전달하여) 현재 발신자 심판을 취할 것 와 (그것의 구현을 보면) 당신을 위해 미래를 해결하는 데 사용할 그냥 해:
나는 이것이 오래 알고 있지만이를 추가 할 수있어, pipeTo 올바른 방법입니다하지만 당신은 당신의 보낸 사람을 복사 할 필요가 없습니다, 동일한 맥락에서 이미입니다. 실제로 pipeTo 당신을 위해이 작업을 수행합니다. 그것은 (그것의 인수에 전달하여) 현재 발신자 심판을 취할 것 와 (그것의 구현을 보면) 당신을 위해 미래를 해결하는 데 사용할 그냥 해:
future { val ans = searchAndCache(s) println("Input Request: "+s+" output:"+ans+" "+reply.path) ans } pipeTo reply
from https://stackoverflow.com/questions/16898131/sender-inside-a-future by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 왜 SimpleDateFormat의 잘못된 날짜를 구문 분석 하는가? (0) | 2019.11.07 |
---|---|
[SCALA] 어떻게 목록 Column.isin를 사용 하는가? (0) | 2019.11.07 |
[SCALA] 디폴트가 사용됩니다 암시하는 변환을 제어 할 수있는 방법이 있습니까? (0) | 2019.11.07 |
[SCALA] int로는 null이 될 수없는 경우, null.asInstanceOf [지능]은 무엇을 의미합니까? (0) | 2019.11.07 |
[SCALA] JSObject를 어떠한 JSON 시리얼 타입 play.api.libs.json.JsObject에 대한 발견 (0) | 2019.11.07 |