scala - Scala 中如何中断异步计算?

标签 scala concurrency interrupt-handling

我需要运行两个并行计算,并在第二个计算完成时中断第一个计算。目前,我已经使用标准 Java 线程实现了它:

/**
 * Runs <var>sup</var> in parallel with <var>main</var>.
 * Terminate (interrupt) it when <var>main</var> finishes.
 */
def support[R](sup: => Unit, main: => R): R = {
  val supThread = new Thread {
    override def run = { sup };
  }

  supThread.start();
  try {
    main;
  } finally {
    supThread.interrupt();
  }
}

可以使用 Scala 的并发库实现相同的行为,而不显式使用 Thread 吗?

最佳答案

不适用于 Scala 标准 future(AFAIK),但是 Twitter's Util library确实支持:

val future = Future { sup }
future.cancel() // in 5.x
future.raise(new FutureCancelledException) // in 6.x

关于scala - Scala 中如何中断异步计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321018/

相关文章:

go - 如何修复 "one problem on race condition check which using go-build-race tools"?

c - 为什么 Linux 内核不会在返回 IRQ_HANDLED 的共享 IRQ 的第一个处理程序处停止?

c - C 上的中断处理程序在一次中断后不起作用

c - IRQ 处理程序未注册

scala - 如何在 Scala 2.11 中找到封闭源文件的名称

scala - 从 url 下载 zip 并使用 SBT 将其解压缩到资源中

python - 使用 call_soon() 和 ensure_future() 的区别

api - 如何在REST API中限制客户端

java - 连接spark master java的安全异常

scala - sudo apt-get install scala 上的 Ubuntu Duplicate sources.list 条目错误