5

2 つの並列計算を実行し、2 番目の計算が終了したら最初の計算を中断する必要があります。現在、標準の 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();
  }
}

Threads を明示的に使用せずに、Scala の並行ライブラリを使用して同じ動作を実現できますか?

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 に答える