Tag: try finally

使用finally而不是catch

我现在已经看过这种模式了几次: bool success = false; try { DoSomething(); success = true; } finally { if (!success) Rollback(); } 我一直在想:为什么这比使用catch回滚更好? try { DoSomething(); } catch { Rollback(); throw; } 确保更改在失败时回滚的两种方法之间有什么区别?

为什么在ThreadAbortException中有时*没有执行finally块*如果它包含await?

更新:我不认为这个问题是否可以重复, 最后可以跳过ThreadAbortException? 因为(1)我没有创建另一个线程,所以不存在竞争条件,(2)只有当finally块包含await时才会出现这种行为,而其他问题没有提及。 考虑这个控制台程序: class Program { static void Main() { try { T().GetAwaiter().GetResult(); } catch (ThreadAbortException) { Thread.ResetAbort(); } catch { } } static async Task Abort() { //await Task.Delay(1); // A Thread.CurrentThread.Abort(); // B } static async Task T() { try { await Abort(); } catch { Console.WriteLine(“catch”); throw; } finally { Console.WriteLine(“finally”); […]