当前位置: 首页 > 知识库问答 >
问题:

如何在Scala中取消Future?

仉宪
2023-03-14

共有1个答案

高森
2023-03-14

这还不是future的API的一部分,但将来可能会作为扩展添加。

作为一种解决办法,您可以使用firstcompletedof来包装两个未来--您要取消的未来和来自自定义promise的未来。然后,你可以通过不履行promise来取消这样创造的未来:

def cancellable[T](f: Future[T])(customCode: => Unit): (() => Unit, Future[T]) = {
  val p = Promise[T]
  val first = Future firstCompletedOf Seq(p.future, f)
  val cancellation: () => Unit = {
    () =>
      first onFailure { case e => customCode}
      p failure new Exception
  }
  (cancellation, first)
}

现在您可以在任何将来调用它来获得一个“可取消的包装”。示例用例:

val f = callReturningAFuture()
val (cancel, f1) = cancellable(f) {
  cancelTheCallReturningAFuture()
}

// somewhere else in code
if (condition) cancel() else println(Await.result(f1))
 类似资料:
  • 我正在运行一个简单的Kafka streams应用程序,它将使用Node JS记录的信息带到一个Kafka主题。 还需要注意的是,时间戳只是一个数字,表示自1970年6月以来的秒数。 我使用scala中的Kafka流来使用这些数据。 例如。 然而,我不确定如何将时间戳(我从nodeJS发送的)提取到这个流中。 例如,如果我尝试做这样的事情 这会导致错误“无法解析符号流”。我在想我该怎么解决这个问题

  • 问题内容: 我正在使用Java NIO复制某些内容: 但是我想让用户可以取消此操作(例如,如果文件太大,需要一段时间)。 我应该怎么做? 问题答案: 使用选项。 注意: 此类可能并非在所有环境中都公开可用。 基本上,您调用一个新线程,然后使用以下命令中断该线程: 然后取消: 请注意,这将引发一个。

  • 我想从Kafka中提取CN。如何用Java从X509Certificate中提取CN?帮助我解决了这个问题,但问题是从X509certificate中提取CN,我花了很多时间来为我自己的问题找到正确的解决方案。我想我的解决方案可以帮助某人更快地得到正确的答案。

  • 问题内容: 我正在编写Java代码,其中需要调用这样定义的Scala函数: 在Scala中,我将简单地调用func String Java代码应类似于:func(“ a”,arg1,arg2),其中arg1是TypeTag ,而arg2是ClassTag 我不确定如何在Java中生成arg1和arg2 问题答案: 您要针对通用对象还是特定对象?对于泛型,没有办法做到,而是接受和作为参数(就像Sca

  • 我有以下数据结构: 我想把它取出来。以下是我在没有任何运气的情况下正在做的事情: 那我该怎么做? P、 实际上,那是https://github.com/json4s/json4s但这并不重要,因为lift在json提取方面有相同的API。 更新:可能需要使用转换方法。我将如何使用它? 更新2:

  • 问题内容: 在AngularJS中给出Ajax请求 如果启动另一个请求(相同的后端,例如不同的参数),取消该请求的最有效方法是什么? 问题答案: 此功能通过超时参数添加到1.1.5版本中: