很感谢Github中的小伙伴 cd-zhang2020 提出的方案,
Issue地址:https://github.com/anjoy8/Blog.Core/issues/52
(或点击阅读原文,查看此Issue)
感觉是最简单,又没问题的,至少目前我测试了Sqlite和SqlServer,他测试了Mysql后没有问题,感兴趣的小伙伴可以自己尝试下,代码很简单:
try
{
Console.WriteLine($"Begin Transaction");
_unitOfWork.BeginTran();
invocation.Proceed();
// 异步获取异常,先执行
// 就是这里
if (IsAsyncMethod(invocation.Method))
{
var result = invocation.ReturnValue;
if (result is Task)
{
Task.WaitAll(result as Task);
}
}
_unitOfWork.CommitTran();
}
catch (Exception)
{
Console.WriteLine($"Rollback Transaction");
_unitOfWork.RollbackTran();
}
然后记得开启我们的事务AOP的阀门:
结果如图,我们故意在Service中放置一个异常,多次操作后,完美回滚:
目前为止,项目的唯一遗留问题基本解决完成,开发进度进入尾声(仅剩支付和消息)。
文章转载自NetCore 从壹开始,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。