根據Scala文檔,在Future上不應該進行阻塞。我應該阻止未來 - 斯卡拉
「如前所述,爲了表現和防止死鎖,強烈建議阻止未來,期貨的回調和組合器是使用其結果的首選方式,但是在某些情況下可能需要阻止情況並得到期貨和承諾API的支持。「
在我的程序退出之前,如何確保我的所有期貨都已完成(及其回調已完成)?我通常在我的主要功能結束時使用Await.result來確保所有期貨已經完成。
object ConcurrencyExample extends App {
val gpf= Future {some operations}
val ccf = Future{some operations}
val atbf = for {g <- gpf
c <- ccf if c == true} yield {some operations}
//is it OK to use Await? If not, how do I ensure that all Futures have finished
?
Await.result(atbf,1000 millis)
}
問題
- 是使用等待錯了嗎?我的代碼不會等待期貨完成,否則
- 如果是這樣,有什麼選擇?
- 在我的主程序退出之前,我如何確保未來及其回調已完成?
謝謝。是否有替代使用Scala的Future更安全,性能更低的風險(如果我們使用Await)? –
@ManuChadha nope,你必須在這種情況下等待。您可以使用await讓主線保持期貨的完整狀態 – pamu
@ManuChadha另一種方式是使用'非deamon'線來進行期貨交易,但這是不好的做法,不應該被使用。 – pamu