gpt4 book ai didi

c# - 了解 MassTransit 中的 "Finalize"

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:54 26 4
gpt4 key购买 nike

我在理解 Finalize() 在 MassTransit 中的工作原理时遇到了一些问题,特别是它是否可以在初始状态下执行。设置:

public Event<ICrawlRequestCreated> CrawlCreated { get; private set; }
public Event CrawlFailed { get; private set; }

public State Executing { get; private set; }
public State Completed { get; private set; }
public State Failed { get; private set; }

public WorkflowSaga()
{
InstanceState(x => x.CurrentState);

Initially(
When(CrawlCreated)
.Then(HandleCrawlRequestCreated)
.TransitionTo(Executing),
When(CrawlFailed)
.Then(HandleCrawlFailed)
.TransitionTo(Failed)
.Finalize()
);

...

SetCompletedWhenFinalized();
}

如果我在 HandleCrawlRequestCreated 中捕获异常,我会引发 CrawlFailed,如下所示:

context.Raise(CrawlFailed);

它会正确触发 HandleCrawlFailed,但不会从存储库中删除状态机实例(通过 EF 的 SQL Server)。但是,如果我在执行状态期间引发 CrawlFailed,该实例将从存储库中删除。我错过了什么?

最佳答案

您应该使用 .Catch() 方法,而不是在您的方法中捕获异常,并且在 .Catch 中您可以完成而不是转换到执行状态。

如果您在 Initial 中完成,它不应该将状态机持久保存到数据库中,但我没有编写 EF 存储库,我不确定测试覆盖率是否确保了这种情况。

关于c# - 了解 MassTransit 中的 "Finalize",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com