【发布时间】:2016-09-20 13:41:18
【问题描述】:
我有一个外部的未来操作,我可以覆盖它的 onOperation 完成方法。我想通过关闭一个Promise来包装它并完成它。但是我无法在其他未来完成那个未来。例如:
import scala.concurrent.{Future, Promise}
import scala.util.{Failure, Success}
import scala.concurrent.ExecutionContext.Implicits.global
def foo():Future[String] = {
val p = Promise[String]()
channel.addListener(new ChannelFutureListener[IoReadFuture] {
override def operationComplete(future: IoReadFuture): Unit = {
p.success("hello")}
}
p.future
}
val x = foo()
x: scala.concurrent.Future[String] = List()
x.onComplete{
case Success(msg) => println(s"$msg world")
case Failure(e) => println(e.getMessage)
}
res1: Unit = ()
有没有惯用的方法来做到这一点不阻塞?
【问题讨论】:
-
对不起,我没看懂问题
-
那是因为你正在导致当前线程休眠。
-
@SarveshKumarSingh 这是一个错误的说法。 sleep 在
Future{:=> }块内。这将在不同的线程上执行 -
请看我的更新
标签: scala concurrency