3

我目前正在调查大众运输。我基于 Starbucks 示例编写了一个简单的示例。

我有以下传奇:

    Define(() =>
    {
        Initially(
            When(ReportRequest)
                .Then((saga, message) => saga.ProcessReportRequest(message))
                .TransitionTo(WaitingForReportToComplete)
            );

        During(WaitingForReportToComplete, When(ReportComplete)
            .Then((saga, message) =>
                {
                    Console.WriteLine("Report Complete for '{0}'", saga.Name);
                    saga.CompleteReportRequest(message);
                })
                .Complete()
            );
    });

我遇到的问题是我有 X 个ReportRequest事件订阅者,每个订阅者创建报告的一小部分。因此,为了使报告被认为是完整的,所有订阅者都需要发布一个ReportComplete事件。目前,第一个完成的订阅者发出一个ReportComplete事件,然后这个传奇也完成了。

如何设置 saga 以等待所有 X 订阅者在完成之前响应给定消息?

4

1 回答 1

0

我认为这是一个两步解决方案:

  • 首先,您需要“招募”您希望参与的所有订阅者。这可能是静态/共享信息,在传奇之外维护,具体取决于您的场景。
  • 只有当您收到所有入伍参与者的“完成”时,您才能进入完成状态。您可以命令 saga 移动到另一个状态。
于 2013-11-22T13:40:33.983 回答