热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Twitter未来阻止

有人可以解释我为什么Twitter未来的行为不是Async?有这个代码privatevalfuture:Future[String]=Futu

有人可以解释我为什么 Twitter 未来的行为不是 Async?有这个代码

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

所以未来是阻塞的,而不是在另一个线程中运行

回答

Twitter 期货与 Scala 中的“标准”期货在语义上有些不同。

Future.apply实际上类似于标准Scala的Future.successful:它会创建一个Future已经满足了-所以,你通过在块立即执行。

使用 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或某些其他转换就可以了。






推荐阅读
author-avatar
莎ss侄莎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有