此代碼測驗取消從可完成的未來創建的光纖,但失敗了:
val toCancel = CompletableFuture.supplyAsync { () =>
Thread.sleep(20000)
()
}
val test =
for {
foo <- IO.fromCompletableFuture(IO(toCancel)).start
_ <- IO.sleep(1.second)
_ <- foo.cancel
} yield toCancel.isCancelled
assertIOBoolean(test)
這是貓效應 3 的錯誤,有解決辦法嗎?
uj5u.com熱心網友回復:
不,這不是錯誤。
看起來您希望cats-effect 會中斷Thread.sleep通話,但恐怕這是不可能的。ACompletableFuture只是一個結果的容器,希望在將來的某個時候可用。它不知道該值可能來自哪里,或者哪個執行緒負責計算它或任何類似的事情。期望cats-effect“中斷潛在的可完成的未來”是沒有意義的(正如您在其中一條評論中所寫的那樣),因為aCompletableFuture不是可以被中斷的東西。它只是一個存盤結果可用的地方。這也是為什么在取消方法的檔案中它這樣說:
mayInterruptIfRunning - 此值在此實作中無效,因為中斷不用于控制處理。
如果要創建IO可以取消的 ,則不能從CompletableFuture.
你可以試試IO.interruptible,或者ASync.async。
uj5u.com熱心網友回復:
看起來這個問題已被修復
https://github.com/typelevel/cats-effect/pull/2665
感謝大家的意見。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387348.html
上一篇:計數來自按Scala2.11.x中的鍵分組的多個映射中鍵值的出現次數
下一篇:如何從使用JDBC檢索的資料庫表中獲取DataFrame,該表由多個日期范圍切割,另一個DataFrame中的每行一個日期范圍?
