Завершение саги по исключению

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

Я наткнулся на эту ветку: Понимание Finalize в MassTransit, мой текущий подход немного отличается. В .Catch() я публикую SagaFaultedEvent и переход в состояние Faulted:

.Catch<Exception>(e => e
    .Publish(context => (ISagaFaultedEvent)new SagaFaultedEvent(context.Instance.Id))
    .TransitionTo(Faulted)));

Затем обработайте это событие, зарегистрировав проблему и завершив экземпляр.

During(Faulted,
    When(SagaFaulted)
        .Activity(x => x.OfInstanceType<LogFaultedSagaActivity>())
        .Finalize());

Кажется, это работает, однако в ответе на упомянутую ветку Крис говорит, что сага должна быть завершена прямо там, в Catch(), однако на ExceptionActivityBinder нет Finalize(), и у меня нет доступа к EventActivityBinder там.

Я что-то здесь упускаю (возможно)? Можно ли доработать сагу прямо в Catch()?


person Slowacki    schedule 13.11.2017    source источник


Ответы (1)


Поддержка этого была добавлена ​​в Automatonymous в версии 3.6.1, выпущенной сегодня.

person Chris Patterson    schedule 20.11.2017
comment
Спасибо, Крис, это было быстрое исправление! - person Slowacki; 21.11.2017