C# 如何确保try代码块中的所有代码都执行或完全失败

C# 如何确保try代码块中的所有代码都执行或完全失败,c#,C#,请确保c#try代码块中的所有代码都执行或完全失败。至于使代码具有事务性,无法确保try块中的所有代码都将一起执行 相反,在catch块中,您需要以某种方式恢复状态,或者回滚更改 我建议将任何重要的内容存储在内存中(如果担心应用程序完全崩溃,则存储在磁盘上),然后在catch语句中恢复状态信息 根据我的猜测,您的try块中发生了多种事情。比如: try { Func1(); Func2(); } 现在,在本例中,您希望两个函数都通过或失败。因此,如果Func1()失败,您仍

请确保c#try代码块中的所有代码都执行或完全失败。

至于使代码具有事务性,无法确保
try
块中的所有代码都将一起执行

相反,在
catch
块中,您需要以某种方式恢复状态,或者回滚更改


我建议将任何重要的内容存储在内存中(如果担心应用程序完全崩溃,则存储在磁盘上),然后在catch语句中恢复状态信息

根据我的猜测,您的
try
块中发生了多种事情。比如:

try
{
     Func1();
     Func2();
}

现在,在本例中,您希望两个函数都通过或失败。因此,如果
Func1()
失败,您仍然希望它调用
Func2()
。问题是,如果
Func1()
失败,则块失败。这是没办法的。如果第一部分失败,那么继续下去就没有意义了,因此甚至不会调用
Func2()
。如果确实是这种情况,则必须对每个函数使用
If
语句,或者使用
try-catch

您是在要求事务性代码,还是只想知道代码是否执行?嗯,每个代码要么执行要么失败。唯一的其他选择是无限循环。如果您的问题是“如何撤消执行失败的影响”,那么恐怕没有语言结构可以做到这一点。很抱歉,我之前没有澄清,我要问的是,我有一个linq代码,它使用entity framework在数据库中插入了两次。现在,第一次插入返回用于第二次插入的主键。现在表A与表B之间有一对多的关系。我要问的是,如果表B插入失败,有没有办法撤消表Ainsertion@Cizaphil有很多关于将数据库回滚到以前状态的文献。我不是一个足够的数据库专家,我会给你一些我觉得不错的建议,但是你可以用谷歌看看你能找到什么。我确信有一种内置方式。不,我想要的是,如果Func1()通过,我确实希望Func2()通过,或者回滚Func1()的副作用。或者换句话说,如果Func2()失败,我确实希望回滚Func1()的效果。