gpt4 book ai didi

scala - 在 Scala 中使用 Future 和 Promise 取消

转载 作者:行者123 更新时间:2023-12-04 00:10:21 27 4
gpt4 key购买 nike

这是 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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com