在 .NET 中执行故障保护代码

本文关键字:保护 代码 故障 执行 NET | 更新日期: 2023-09-27 17:55:57

可能的重复项:
C# 对象的事务?

我的问题是 - 确保执行给定段中的所有代码或根本不执行任何代码的最佳方法是什么?在这种情况下,尝试 Catch 不起作用,因为如果第 1 行是更新的,它将发生,那么如果第 2 行是发送电子邮件并且由于某种原因失败,它将抛出异常,但更新已经发生(而我想要的是这样的 ->如果第 40 行失败,请不要执行第 20 行)。

我知道在数据库端你可以使用事务,但我想知道代码中是否有类似的代码......

在 .NET 中执行故障保护代码

事务通过在发生错误时执行回滚来确保原子性。但并非所有操作都可以回滚,例如发送邮件。它是从弓中射出的箭,不会回来。

简短的回答是,这是不可能的。

更新:@JustinNiessner上面的评论链接到这个很好的问题,这表明在这方面做了一些工作。但请注意,除非在最简单的情况下,否则无法保证。具体来说,回滚 I/O 副作用可能非常困难。

一般来说,没有什么可以回滚你写的任何语句。

但是,可以将支持事务添加到代码的某些特定部分。在这种情况下,分布式事务可能很有用。