How to split and dispatch an async control-flow using Continuations?

后端 未结 3 766
南旧
南旧 2021-02-05 15:17

I have an asynchronous control-flow like the following:

ActorA ! DoA(dataA, callback1, callbackOnErrorA)

def callback1() = {
  ...
  ActorB ! DoB(dataB, callbac         


        
3条回答
  •  闹比i
    闹比i (楼主)
    2021-02-05 16:17

    This is very simplified, but shows how to split up a single control flow among three actors, passing the state along to each:

    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)
      }
    
    }
    

提交回复
热议问题