【发布时间】:2016-06-09 08:45:06
【问题描述】:
所以我有一些带有端点的服务器代码,我想在其中异步运行东西。为此,我正在使用期货。有些任务会导致结果,但也有昂贵的 IO 任务不会,所以我在火中执行它们并忘记 Future 像这样:
import scala.concurrent.Future
val ec = scala.concurrent.ExecutionContext.global
Future {
Thread.sleep(10000)
println("Done")
}(ec)
println("Exiting now")
输出是:
import scala.concurrent.Future
ec: scala.concurrent.ExecutionContextExecutor = scala.concurrent.impl.ExecutionContextImpl@2315ca48
res0: scala.concurrent.Future[Unit] = scala.concurrent.impl.Promise$DefaultPromise@7d1e50cb
Exiting now
res1: Unit = ()
通常在服务器上这不是什么大问题,因为上下文在接收其他任务时会继续运行,因此 IO 可以完成。但是当我测试时,测试结束并且里面的任务开始抛出,因为他们使用的服务变得不可用。
所以问题是:我如何等待这些火灾并忘记未来而不阻塞我的主要执行?
【问题讨论】:
-
你肯定要阻止主执行。
-
能否也粘贴测试代码。
-
@Nyavro 我真的不想那样做。错误记录在服务器上,不需要传播到客户端。如果我等待 IO,我们正在讨论增加 3-5 秒的响应时间。
-
我想告诉执行上下文等待它运行的任务
-
你使用哪个测试框架?
标签: scala concurrency future