【发布时间】:2017-11-13 15:11:01
【问题描述】:
我创建了一个 saga,想知道如何在活动执行期间处理我的异常。理想情况下,我想在某些情况下立即在.Catch() 中终止该传奇实例。
我偶然发现了这个帖子:Understanding "Finalize" in 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() 中完成 Saga?
【问题讨论】:
标签: c# .net masstransit automatonymous