这是 my previous question 的后续.
假设我有一个任务,它执行一个可中断的阻塞调用。我想将它作为 Future
运行并用 failure
取消它Promise
的方法.
我希望取消工作如下:
Future
调用 onFailure
. 是否有意义?是否可以在 Scala 中实现?是否有此类实现的任何示例?
最佳答案
scala.concurrent.Future 是只读的,所以一个读者不能为其他读者搞砸。
看起来你应该能够实现你想要的,如下所示:
def cancellableFuture[T](fun: Future[T] => T)(implicit ex: ExecutionContext): (Future[T], () => Boolean) = {
val p = Promise[T]()
val f = p.future
p tryCompleteWith Future(fun(f))
(f, () => p.tryFailure(new CancellationException))
}
val (f, cancel) = cancellableFuture( future => {
while(!future.isCompleted) continueCalculation // isCompleted acts as our interrupted-flag
result // when we're done, return some result
})
val wasCancelled = cancel() // cancels the Future (sets its result to be a CancellationException conditionally)
关于scala - 在 Scala 中使用 Future 和 Promise 取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16020964/