gpt4 book ai didi

c# - IDisposable.Dispose 永远不会在使用 block 异常后被调用

转载 作者:行者123 更新时间:2023-11-30 19:01:28 25 4
gpt4 key购买 nike

我从许多来源了解到,例如 thisthis如果在 Using block 中抛出异常,将始终调用 IDisposableDispose 方法。那么我就有了这段代码:

static class MainEntryPoint
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;

using (var x = new Disposable())
{
throw new Exception("asdfsdf");
}
}

private static void HandleUnhandledException(Object sender, System.UnhandledExceptionEventArgs e)
{
Environment.Exit(0);
}
}

class Disposable : IDisposable
{
public void Dispose()
{
System.Diagnostics.Debug.Print("I am disposed");
}
}

它在抛出未处理的异常时退出应用程序。 Dispose 方法永远不会被调用。为什么?

最佳答案

Environment.Exit将终止程序

If Exit is called from a try or catch block, the code in any finally block does not execute. If the return statement is used, the code in the finally block does execute.

using (var x = new Disposable())
{
throw new Exception("asdfsdf");
}

将转换为

Disposable x = new Disposable();
try
{
throw new Exception("asdfsdf");
}
finally
{
if (x != null)
x.Dispose();
}

关于c# - IDisposable.Dispose 永远不会在使用 block 异常后被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com