如何在 MassTransit 上动态通知延迟的预定事件?

How to declare a scheduled event with delay informed dynamically on MassTransit?

在 Sample-ShoppingWeb 的 ShoppingCartStateMachine 上有一个类似这样的配置来安排事件:

 Schedule(() => CartExpired, x => x.ExpirationId, x =>
            {
                x.Delay = TimeSpan.FromSeconds(10);
                x.Received = e => e.CorrelateById(context => context.Message.CartId);
            });

请注意 "x.Delay" 属性,这是在构造函数上设置的,但就我而言,我想动态地通知该时间延迟。

When(ApproveOrder)
                .Then(context =>
                {
                    context.Instance.EstimatedTime = context.Data.EstimatedTime;
                    context.Instance.Status = context.Data.Status;
                })

...并设置具有 "context.Data.EstimatedTime" 延迟的计划事件,例如

有一种方法可以在状态机构造函数中使用 "Schedule" 声明 class?

状态机中使用的 Schedule 扩展得到了增强,增加了对动态延迟的支持。例如,您可以执行以下操作:

When(ApproveOrder)
    .Then(context => context.Instance.EstimatedTime = context.Data.EstimatedTime)
    .Schedule(CartExpired, context => context.Instance.EstimatedTime)

这将使用第二个参数的延迟,而不是创建计划时指定的延迟。