gpt4 book ai didi

scala - 推特 future 封锁

转载 作者:行者123 更新时间:2023-12-05 09:32:32 27 4
gpt4 key购买 nike

有人可以解释为什么 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以防万一有人需要做mapflatMap或对其进行一些其他转换。

关于scala - 推特 future 封锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67983362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com