2016-03-23 3 views
0

Я делаю запрос от саги государственной машины MassTransit и жду ответа.Комбинировать с Whens in Automatonymous конечный автомат

Но может быть две ошибки возвращаются ко мне:

  • MyRequest.TimeoutExpired
  • MyRequest.Faulted

Я не забочусь о каких условиях просьба не была выполнена, Я хочу, чтобы в обеих ситуациях было опубликовано сообщение об ошибке.

Однако, я не мог найти способ сочетать два результата с или, поэтому у меня может быть один обработчик для обоих исходов, а не копировать мой код.

ответ

1

В этом случае вы должны либо создать пользовательскую активность (расширенную, возможно, не обязательно), либо просто создать метод, который вызывается из условий When(), чтобы вы могли повторно использовать поведение между операторами.

Task PublishEvent(BehaviorContext<TInstance> context) 
{ 
    var consumeContext = context.GetPayload<ConsumeContext>(); 

    return consumeContext.Publish(new MyEvent(...)); 
} 

{ 
    During(MyRequest.Pending, 
     When(MyRequest.Completed) 
      .ThenAsync(PublishEvent), 
     When(MyRequest.Faulted) 
      .ThenAsync(PublishEvent)); 
} 
+0

К сожалению, нет 'GetPayload' но только' TryGetPayload', так что мне нужно знать тип возвращаемого объекта ... Работает в описанном случае, но не в других ситуациях, когда я хочу, чтобы запланировать же сообщение из разных ветвей исполнения. –

+0

Тип ConsumeContext. –

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