在自动命名状态机中组合到 Whens
Combine to Whens in Automatonymous state machine
我正在从 MassTransit 状态机 saga 发出请求并等待回复。
但是可能有两个错误返回给我:
- MyRequest.TimeoutExpired
- MyRequest.Faulted
我不关心在哪些情况下请求未得到满足,我希望这两种情况都会导致发布错误消息。
但是,我找不到任何方法将两个结果与 或 条件结合起来,所以我可以对两个结果有一个处理案例,而不是复制粘贴我的代码。
在这种情况下,您应该创建一个自定义 activity(高级,可能不是必需的)或者只创建一个从两个 When() 条件调用的方法,以便您可以重用两者之间的行为声明。
Task PublishEvent(BehaviorContext<TInstance> context)
{
var consumeContext = context.GetPayload<ConsumeContext>();
return consumeContext.Publish(new MyEvent(...));
}
{
During(MyRequest.Pending,
When(MyRequest.Completed)
.ThenAsync(PublishEvent),
When(MyRequest.Faulted)
.ThenAsync(PublishEvent));
}
我正在从 MassTransit 状态机 saga 发出请求并等待回复。
但是可能有两个错误返回给我:
- MyRequest.TimeoutExpired
- MyRequest.Faulted
我不关心在哪些情况下请求未得到满足,我希望这两种情况都会导致发布错误消息。
但是,我找不到任何方法将两个结果与 或 条件结合起来,所以我可以对两个结果有一个处理案例,而不是复制粘贴我的代码。
在这种情况下,您应该创建一个自定义 activity(高级,可能不是必需的)或者只创建一个从两个 When() 条件调用的方法,以便您可以重用两者之间的行为声明。
Task PublishEvent(BehaviorContext<TInstance> context)
{
var consumeContext = context.GetPayload<ConsumeContext>();
return consumeContext.Publish(new MyEvent(...));
}
{
During(MyRequest.Pending,
When(MyRequest.Completed)
.ThenAsync(PublishEvent),
When(MyRequest.Faulted)
.ThenAsync(PublishEvent));
}