有人可以解释为什么 Twitter future 的行为不是异步的吗? 有了这个代码
private val future: Future[String] = Future {
Thread.sleep(2000)
println(s"Running this effect in ${Thread.currentThread().getName}")
"Hello from Twitter"
}
println("Present")
Await.result(future)
两秒后的输出是这个
Running this effect in main
Present
所以future是阻塞的而不是运行在另一个Thread中
最佳答案
Twitter future 与 scala 中的“标准” future 在语义上有所不同。
Future.apply
实际上类似于标准 scala 的 Future.successful
: 它创建了一个 Future
已经满足 - 所以,您传入的 block 将立即执行。
使用 Twitter Futures,你不需要烦人的 ExecutionContext
你必须隐式地拖到任何地方。相反,你有一个 FuturePool
您将代码明确地交给它异步执行。例如:
val pool = FuturePool.unboundedPool
val future: Future[String] = pool {
Thread.sleep(2000)
println(s"Running this effect in ${Thread.currentThread().getName}")
"Hello from Twitter"
}
这样做的好处是,与 scala.concurrent
不同, 这个Future
是独立的:它“知道”管理它的池,所以,你不需要随身携带它 Future
以防万一有人需要做map
或 flatMap
或对其进行一些其他转换。
https://stackoverflow.com/questions/67983362/
相关文章:
javascript - console.log 在我的输入字段中给出 undefined
numpy - XGBoost:检查失败:有效:输入数据包含 `inf` 或 `nan`
Flutter - 墨水池 : Why does onHover() require onTap()
flutter - 检查 flutter 中的连接并根据连接状态更改状态
kubernetes - 如何在 Kubernetes cronjob 中执行脚本 shell
c++ - std::sort 中用 lambda 函数指定的比较函数是否返回 bool 类型?
ruby - 如何在 ruby 中编写一个采用散列样式、方括号参数的方法,例如 mymethod