2016-04-28 1 views
1

На ShoppingCartStateMachine Sample-ShoppingWeb там есть конфигурация, как это планировать события:Как объявить запланированное событие с задержкой, динамически сообщаемой на MassTransit?

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" Задержка, например

Есть ли способ сделать это, используя объявление «Расписание» в классе конструктора состояний?

ответ

1

Расширение Schedule, используемое в автомате пользователя, было расширено для дополнительной поддержки динамических задержек. Например, вы можете сделать следующее:

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

Это будет использовать задержку второго аргумента вместо одного, указанного при создании расписания.

Смежные вопросы