我负责的第三方库,它为我提供了异步方法包装的异步调用的过程是这样的:在阿卡演员
def doSomething1(input:String, callback:String => Any)
def doSomething2(input:Double, callback:String => Any)
库运行在某个线程的东西它创建。
我想围绕一个演员,所以我可以ask
它为垃圾,但我不知道如何获得promise
访问,以便我可以满足要求。
简易方法:
class Wrapper extends Actor {
def receive {
case s:String => doSomething1(s, sender ! _)
case d:Double => doSomething2(d, sender ! _)
}
}
val wrapper = system.actorOf(Props[Wrapper], "wrapper")
然后ask
它的结果:
(wrapper ? "hello").mapTo[String].foreach(println)
(wrapper ? 123.456).mapTo[String].foreach(println)
但结果不会回来,大概是因为回调不从演员也ask
版的到来。
有没有办法获得promise
所以回拨可以success
呢?
我可以把它通过存储发送者,告诉回调为目标的包装工作,然后让包装者将消息发送回发件人。 但现在我想知道如果消息回来乱序会发生什么?它如何知道如何匹配它们? – dvmlls
请参阅我对@ yan的回答的评论。 – cmbaxter