问题描述
我有一个包含一堆事件的 Automatonymous 状态机。 我想在前一个事件完成后发布每个事件。我知道我可以在每个事件的消费者中发布它,但其中一些可能会在不同的状态机中重用,所以我想在状态机定义中声明它。这是我现在所拥有的:
public class TestStateMachine : MasstransitStateMachine<TestState>
{
public State StepOneCompleted { get; set; }
public State StepTwoCompleted { get; set; }
public State StepThreeCompleted { get; set; }
public Event<ProcessstepOne> ProcessstepOne { get; set; }
public Event<ProcessstepTwo> ProcessstepTwo { get; set; }
public Event<ProcessstepThree> ProcessstepThree { get; set; }
public TestStateMachine()
{
InstanceState(x => x.CurrentState);
Initially(When(ProcessstepOne)
.Publish(context => new ProcessstepTwo
{
CorrelationId = context.Data.CorrelationId,})
.TransitionTo(StepOneCompleted));
During(StepOneCompleted,When(ProcessstepTwo)
.Publish(context => new ProcessstepThree
{
CorrelationId = context.Data.CorrelationId,})
.TransitionTo(StepTwoCompleted));
During(StepTwoCompleted,When(ProcessstepThree).TransitionTo(StepThreeCompleted));
}
}
根据此定义,在第一步仍在执行时发布第二步,在执行第二步时发布第三步。我想确保第一步完成,然后第二步发布,然后第二步完成,第三步发布。我尝试使用 WhenLeave
行为,但它需要一个状态,而不是一个事件,因此我无法访问 context.Data
并且 CorrelationId 不仅是我将在步骤之间传递的变量。
是否有可能在状态机定义中实现这一点?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)