0

我正在处理一个 3rd-party 库,它为我提供了这样的异步方法调用:

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吗?

4

1 回答 1

0

请注意,我尚未对此进行测试,但这与您要查找的内容有关吗?:

class Wrapper extends Actor {
  def receive = {
    case s : String =>
      val response = Promise[String]()
      val originator = sender
      doSomething1(s, response.success _)
      response.future.foreach(originator ! _)
    case d : Double =>
      val response = Promise[Double]()
      val originator = sender
      doSomething2(d, response.success _)
      response.future.foreach(originator ! _)
  }
}
于 2013-10-03T15:17:15.363 回答