5

我需要运行两个并行计算并在第二个完成时中断第一个。目前,我已经使用标准 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显式使用 s 吗?

4

1 回答 1

4

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

val future = Future { sup }
future.cancel() // in 5.x
future.raise(new FutureCancelledException) // in 6.x
于 2013-03-10T11:26:39.033 回答