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

Scala,检查Actor是否已退出

发布时间:2020-12-16 18:15:06 所属栏目:安全 来源:网络整理
导读:在 Scala 2.8中,当我开始演员时,我可以通过消息传递进行通信.这反过来意味着我可以发送最终的Exit()消息或我认为适合我的协议的任何内容. 但是我如何检查演员是否退出?我可以很容易地想象自己有一个任务,一个主演员开始一些工人演员,然后只是等待答案,每次
在 Scala 2.8中,当我开始演员时,我可以通过消息传递进行通信.这反过来意味着我可以发送最终的Exit()消息或我认为适合我的协议的任何内容.

但是我如何检查演员是否退出?我可以很容易地想象自己有一个任务,一个主演员开始一些工人演员,然后只是等待答案,每次检查这是否是最终的答案(即任何演员仍在工作或他们都退出?).

当然,我可以让他们都发回“我已经完成”的消息,然后计算它们,但这在某种程度上是令人不满意的.

在测试工人演员的完成时,最佳做法是什么?

编辑#1

嘿伙计们,我正在研究期货,但遇到了麻烦.有人可以解释为什么这段代码不起作用:

package test
import scala.actors.Futures._

object FibFut extends Application{

    def fib(i:Int):Int = 
        if(i<2)
            1
        else
            fib(i-1)+fib(i-2)

    val f = future{ fib(3) }

    println(f())    

}

如果我在future-body中定义函数fib,它就可以工作.它必须是范围的东西,但我没有上面的任何错误,它只是挂起.任何人?

编辑#2

似乎扩展应用程序并不是一个好方法.定义主要方法使一切正常.以下代码是我正在寻找的,所以Futures得到了大拇指:)

package test

import scala.actors.Futures._

object FibFut {

  def fib(i: Int): Int = if (i < 2) 1 else fib(i - 1) + fib(i - 2)

  def main(args: Array[String]) {

    val fibs = for (i <- 0 to 50) yield future { fib(i) }

    for (future <- fibs) println(future())

  }

}

解决方法

个人而言,我是“我已经完成”消息的粉丝;这是管理工作分配的好方法,作为奖励,你已经知道所有孩子什么时候完成了他们正在做的事情.

但是,如果你真的只想要做一些工作并等到一切准备就绪,请查看scala.actors.Futures.你可以要求它做一些计算:

val futureA = Futures.future {
  val a = veryExpensiveOperation
  (a,"I'm from the future!")
}

如果您提出了多个请求,那么您可以等待所有内容完成:

Futures.awaitAll(600*1000,futureA,futureB,futureC,futureD)
// Returns once all of A-D have been computed
val actualA = futureA()   // Now we get the value

(编辑:李大同)

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

    推荐文章
      热点阅读