0
我必須運行復雜的異步計算,並能夠在任何時候(從計算外部)中止它們。如何隨時取消異步計算?
當前實現使用scala.concurrent.Future來運行計算。但是,在執行過程中似乎沒有明顯的方式取消scala Future。
我發現並嘗試了一些對此問題的推薦解決方案,例如使用Promise實施cancellable Future或使用具有cancel()方法的java.util.concurrent.Future。
所有這些問題都有同樣的問題:執行只在到達Thread.sleep()調用時中止。
這是有兩個原因的一個問題:
- 的計算應以最快的速度完成越好。即使很短的睡眠時間也會適得其反。
- 我不是這些計算的主要開發人員,我想避免對計算的實現施加任意約束。
「執行僅當它到達Thread.sleep()」時纔會中止。這不是真的。只要達到檢查線程中斷狀態的適當代碼,它就會中止。 – Kayaman
這聽起來像是你的計算太大了,如果你不得不擔心中間流的中斷。你不會說你有什麼樣的工作量,並且它很容易並行。 –
@ChrisMowforth你的意思是「中流」中斷是什麼意思?我沒有詳細介紹工作負載,因爲它可能幾乎是從簡單的wordcount到複雜的視頻過濾器或模擬。我爲這些計算提供了一個運行環境,如果需要,我必須能夠殺死它們。這些計算由第三方執行。 – DrummerB