很感谢Github中的小伙伴 cd-zhang2020 提出的方案,
Issue地址:https://github.com/anjoy8/Blog.Core/issues/52
感觉是最简单,又没问题的,至少目前我测试了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 从壹开始 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!