如何在Scala中中断异步计算?

时间:2013-03-10 10:03:18

标签: 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吗?

1 个答案:

答案 0 :(得分:4)

不是Scala标准期货(AFAIK),但Twitter's Util library确实支持它:

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