首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何取消可完成的未来与猫的影响3

如何取消可完成的未来与猫的影响3
EN

Stack Overflow用户
提问于 2021-12-17 09:56:42
回答 1查看 321关注 0票数 0

此代码测试取消从可完成的未来创建的光纤,它失败了:

代码语言:javascript
复制
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虫,有工作吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-18 01:44:24

不,这不是虫子。

似乎你希望猫效应会中断Thread.sleep电话,但恐怕这是不可能的。CompletableFuture只是一个容器,希望在将来的某个时候可以得到这个结果。它不知道这个值可能来自哪里,或者哪个线程负责计算它,或者类似的任何东西。期望猫-效果“中断潜在的可完成的未来”(正如您在其中一条评论中所写)是没有意义的,因为CompletableFuture不是可以被打断的东西。这仅仅是一个存储结果的地方,一旦有了它。这也是为什么在cancel方法的文档中它说:

mayInterruptIfRunning -此值在此实现中没有影响,因为中断不用于控制处理。

如果您想要创建一个可以取消的IO,则不能从CompletableFuture创建它。

您可以尝试IO.interruptible,或者ASync.async

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70391337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档