アレッ*_*ックス 1 multithreading scala future
我正在努力解决这个问题futures.这两者之间有很大的不同吗?
//1
import scala.concurrent.Await
import scala.concurrent.Future
import scala.concurrent.duration._
def longRequestToServer(): String = {...}
val future = Future { longRequestToServer() }
val resultAsync = Await.result(future, 60.seconds)
Run Code Online (Sandbox Code Playgroud)
和
//2
val resultSync = try {
longRequestToServer()
} catch {
case _: Exception => "???"
}
Run Code Online (Sandbox Code Playgroud)
除了60 seconds第一种情况的时间段.
som*_*ytt 14
封锁是邪恶的.
在将来阻塞然后等待结果会消耗两个线程而不是一个线程.
那是邪恶的两倍吗?
这是你想要避免的拦截电话.
(将来,你至少要把它包裹起来,blocking使它成为邪恶的一半.精确的比例实际上是.666邪恶.)
编辑:要考虑的其他因素是两个版本在关闭时可能有不同的行为.在第一种情况下,未来可以被拒绝.协调这些影响,尤其是多个自定义执行程序和回调,相对微妙且容易出错.(这是人们更喜欢演员的未来.)
(早期,所有throwable的期货并不完全健壮,因此您可能无法在工作线程上看到错误,但AFAIK已修复.)
| 归档时间: |
|
| 查看次数: |
7601 次 |
| 最近记录: |