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

scala – 如何使用连续分割和调度异步控制流?

发布时间:2020-12-16 09:17:16 所属栏目:安全 来源:网络整理
导读:我有一个异步控制流程,如下所示: ActorA ! DoA(dataA,callback1,callbackOnErrorA)def callback1() = { ... ActorB ! DoB(dataB,callback2,callbackOnErrorB)}def callback2() = { ActorC ! DoC(dataC,callback3,callbackOnErrorC)} ... 我将如何将这个流分
我有一个异步控制流程,如下所示:

ActorA ! DoA(dataA,callback1,callbackOnErrorA)

def callback1() = {
  ...
  ActorB ! DoB(dataB,callback2,callbackOnErrorB)
}

def callback2() = {
  ActorC ! DoC(dataC,callback3,callbackOnErrorC)
} 

...

我将如何将这个流分成几个部分(延续),并在维持整体状态的同时将它们顺序地分配给不同的执行者(或线程/任务)?

任何提示赞赏,谢谢

解决方法

这是非常简化的,但显示了如何在三个演员之间分割一个控制流,将状态传递给每个:

package blevins.example

import scala.continuations._
import scala.continuations.ControlContext._
import scala.actors.Actor._
import scala.actors._

object App extends Application {

  val actorA,actorB,actorC = actor {
    receive {
      case f: Function1[Unit,Unit] => { f() }
    }
  }

  def handle(a: Actor) = shift { k: (Unit=>Unit) =>
    a ! k
  }

  // Control flow to split up
  reset {
      // this is not handled by any actor
      var x = 1
      println("a: " + x)

      handle(actorA)  // actorA handles the below
      x += 4
      println("b: " + x)

      handle(actorB) // then,actorB handles the rest
      var y = 2
      x += 2
      println("c: " + x)

      handle(actorC) // and so on...
      y += 1
      println("d: " + x + ":" + y)
  }

}

(编辑:李大同)

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

    推荐文章
      热点阅读