gpt4 book ai didi

c# - 在 ThreadAbortException 上下文中防止资源泄漏的推荐方法是什么?

转载 作者:太空狗 更新时间:2023-10-30 00:57:01 27 4
gpt4 key购买 nike

我正在努力提高一段代码的异常安全性,我意识到引发的 ThreadAbortException 可能会导致意外的资源泄漏,即使在使用 C# using< 保护资源时也是如此 构造。例如,考虑以下代码(可以在单独的线程中运行)。

using (TextWriter writer = CreateWriter(filename))
{
// do something with the writer.
}

TextWriter CreateWriter(string filename)
{
return new CustomWriter(File.OpenWrite(filename));
}

如果运行此代码的线程异常终止,那么我希望立即关闭filename 引用的文件句柄。我可以在不使用 try/finally block 替换 using 构造的情况下执行此操作吗?

我的假设是 ThreadAbortException 可能随时引发,这意味着我应该注意语句之间发生的事情。虽然我可以使用 try/finally block 来防止 CreateWriter 中的异常,但是 using 构造在评估括号中的表达式之前不会执行相同的操作,这意味着如果在 CreateWriter 返回后立即发生异常,则文件资源保持打开状态。

我知道终结器最终会释放文件句柄,但我想知道是否有确定性的方法来解决这个问题,而无需在 CreateWriter 的每个地方捕获 ThreadAbortException > 被使用。

最佳答案

是的,避免这种情况的确定性方法是不使用 Thread.Abort。曾经。向您的线程发出停止时间的信号,并让它们优雅地终止。 Thread.Abort 是一个很大的转移注意力的东西,放在 API 中只是为了让你误会。 ;)

http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation

关于c# - 在 ThreadAbortException 上下文中防止资源泄漏的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6256094/

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