c# - 每个事件完成后如何在自动状态机中发布事件?
问题描述
我有一个带有一堆事件的自动状态机。我想在前一个事件完成后发布每个事件。我知道我可以在每个事件的消费者中发布它,但其中一些可能会在不同的状态机中重用,所以我想在状态机定义中声明它。这是我现在拥有的:
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 将不仅仅是我将在步骤之间传递的变量。
有没有办法在状态机定义中实现这一点?
解决方案
推荐阅读
- python - Python 搜索数据框以查找具有特殊字符的列表中的单词。输出不如预期
- node.js - Alexa Skill 不适用于出站 API 调用
- python - 如何在 2 行中水平附加到数组
- java - 检索表中包含 SQLite 特定列中的特定值的最新行的最佳方法是什么?
- python - 三个不同的数据框行组合
- r - 在 R 中的任何列中呈现不为零的行
- flutter - 如何防止我的应用程序状态发生变化?
- powershell - powershell 上等效的 Unix 命令
- permissions - 谷歌上的权限操作未显示
- tomcat - 使用 Tomcat jar 时 ANT 战争文件编译失败