.NET中的失败安全代码执行

pnd*_*uke 0 .net c#

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

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

我知道在数据库方面你可以使用Transactions,但我想知道代码中是否有相同的...

Mis*_*ble 5

事务通过在发生错误的情况下执行回滚来确保原子性.但并非所有操作都可以回滚,例如,发送邮件.它的弓箭出来了,没有回来.

简短的回答是,这是不可能做到的.

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