如何使用 Continuations 拆分和分派异步控制流?
我有一个如下所示的异步控制流:
ActorA ! DoA(dataA, callback1, callbackOnErrorA)
def callback1() = {
...
ActorB ! DoB(dataB, callback2, callbackOnErrorB)
}
def callback2() = {
ActorC ! DoC(dataC, callback3, callbackOnErrorC)
}
...
如何将此流分成几个部分(延续)并按顺序将这些部分分派给不同的参与者(或线程/任务),同时保持整体状态?
任何提示表示赞赏,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我喜欢使用 scalaz.concurrent.Promise 。这个例子与你问题中的例子不完全一样,但它给了你一个想法。
输出:
您将在此 Scalaz 并发的介绍://twitter.com/runarorama/status/8573543228" rel="nofollow noreferrer">来自 Runar 的演示。
这种方法不如 Actor 灵活,但组合得更好并且不会出现死锁。
I like to use
scalaz.concurrent.Promise
. This example isn't exactly like the one in your question, but it gives you the idea.Output:
You'll find an introduction to Scalaz concurrency in this presentation from Runar.
This approach isn't as flexible as Actors, but composes better and can't deadlock.
这非常简单,但展示了如何在三个参与者之间拆分单个控制流,并将状态传递给每个参与者:
This is very simplified, but shows how to split up a single control flow among three actors, passing the state along to each:
请参阅 Akka 的 Future 以及如何组合它们 或scalaz的Promises,它们几乎是一样的,只有细微的差别。
See Akka's Futures and how to compose them or scalaz's Promises, they are nearly the same, there are only slight differences.