我对公共交通库中的 statmachine 有疑问。这是我的代码:
public Event<Requested>? Requested { get; }
public Event<Started>? Started { get; }
public Event<ArchiveFinished>? ArchiveFinished { get; }
public Event? Finished { get; }
public Test() {
InstanceState(x => x.CurrentState);
Event(() => Requested, x => x.CorrelateById(context => context.Message.RequestId));
Event(() => Started, x => x.CorrelateById(context => context.Message.RequestId));
Event(() => ArchiveFinished, x => x.CorrelateById(context => context.Message.RequestId));
Initially(
When(Requested),
When(Started),
When(ArchiveFinished)
);
CompositeEvent(() => Finished,
x => x.ReadyEventStatus,
CompositeEventOptions.IncludeInitial,
Requested,
Started,
ArchiveFinished
);
DuringAny(
When(Finished)
.Publish(context => new Finished() { RequestId = RequestId })
.Finalize()
);
// Error in any of events?
SetCompletedWhenFinalized();
}
问题是状态机的工作方式与我完全一样。但有一件事根本不起作用。如果任何事件中有错误,我可以看到该消息有一条错误消息。但我需要,当任何给定事件发生错误时以某种方式调用错误消息。这有可能吗?我尝试了Catch,但没有成功。完成故障不起作用。
编辑:
例如,如果正在处理 Requested 消息并且给定消费者中发生错误,则会创建新的 Requested-Fault 消息。在那里可以处理所有必要的东西。但是,我仍然需要某种方法来对状态机中的这种情况做出反应。创建类似于 FinishedFault 的消息。如果 Requested、Started 或 ArchiveFinished 消息的任何使用者发生错误/异常,我将需要这个。希望这样更清楚。
您可以使用以下方式消耗状态机中的故障:
Event<Fault<T>>
其中T是原始消息类型。