從官方階documentation一個例子:如果f和g都失敗,如何讓`first`返回`Failure`?
def first[T](f: Future[T], g: Future[T]): Future[T] = {
val p = promise[T]
f onSuccess {
case x => p.trySuccess(x)
}
g onSuccess {
case x => p.trySuccess(x)
}
p.future
}
注意,在本實施方式中,如果既不F,也未克成功,則 第一個(F,G)永遠不會完成(或者與一個值或與 例外)。
它給了我們一個警告,但沒有相應的解決方案。如果f和g都失敗,你怎麼能讓first
返回一個Failure
?
什麼是你想在這裏實現?有兩個期貨並行運行並有第一個回報的解決方案有特別的理由嗎?這引入了代碼執行中的非確定性,並且不能被優雅地解決(也就是說,沒有引入變量來跟蹤狀態)。 –