加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:38:14 所属栏目:安全 来源:网络整理
导读:我需要运行两个并行计算,并在第二个完成时中断第一个计算.目前,我已使用标准 Java线程实现它: /** * Runs varsup/var in parallel with varmain/var. * Terminate (interrupt) it when varmain/var finishes. */def support[R](sup: = Unit,main: = R): R =
我需要运行两个并行计算,并在第二个完成时中断第一个计算.目前,我已使用标准 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的并发库可以实现相同的行为,而无需显式使用Threads吗?

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读