如何等待所有工作在 Akka.Net 内完成?

How do I wait for all work to complete in Akka.Net?

我已成功将工作发送给演员池来执行我的工作,但现在我想对所有工作人员返回的结果进行一些汇总。我怎么知道每个人都完成了?

我想出的最好办法是维护一组请求 ID 并等待该组归零,但这似乎不够优雅。

通常,您希望为此使用我们所说的 "Commander" 模式。本质上,您有一个有状态的参与者(Commander)负责启动和监视任务。然后,您将实际工作外包给 actor 池,并让他们在完成时向 Commander 报告。然后,指挥官可以通过计算 # completions / size of worker pool.

来跟踪工作进度

这样,worker 可以在工作时独立地被监视和重新启动,但是所有宝贵的任务级状态和信息都保存在 Commander 中(这称为 "Error Kernel pattern"

您可以在 Akka.NET scalable webcrawler demo 中看到这方面的示例。