- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 finally 块(带有一个空的 try 块)中有一些关键逻辑,因为我想保证即使线程中止也能执行代码。但是,我还想检测 ThreadAbortException。我发现将我的关键 try/finally 块包装在 try/catch 中不会捕获 ThreadAbortException。有什么办法可以检测到吗?
尝试 {
尝试 { }
最后 {
//关键逻辑
}
} catch(异常前){
//这里没有捕获ThreadAbortException,而是抛出异常
//从关键逻辑是
}
最佳答案
这是一个奇怪的问题。
您发布的代码应该可以工作。似乎正在进行某种优化,决定不调用您的捕获处理程序。
所以,我想用这个检测异常:
bool threadAborted = true;
try {
try { }
finally { /* critical code */ }
threadAborted = false;
}
finally {
Console.WriteLine("Thread aborted? {0}", threadAborted);
}
Console.WriteLine("Done");
Thread aborted? False
bool threadAborted = true;
try {
try { }
finally { /* critical code */ }
threadAborted = AmIEvil();
}
finally {
Console.WriteLine("Thread aborted? {0}", threadAborted);
}
Console.WriteLine("Done");
AmIEvil
只是:
[MethodImpl(MethodImplOptions.NoInlining)]
static bool AmIEvil() {
return false;
}
Thread aborted? True
try {
try { }
finally { /* critical code */ }
NoOp();
}
catch (Exception ex) {
// ThreadAbortException is caught here now!
}
NoOp
只是:
[MethodImpl(MethodImplOptions.NoInlining)]
static void NoOp() { }
关于.net - 如何在 finally block 中检测 ThreadAbortException? (。网),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/353270/
我正在使用 WinDBG 调查内存转储,我想知道为什么堆中有两个 System.Threading.ThreadAbortExceptions 都是空的。 对于其他三个已发现的异常,我理解它们存在的原
我最近在遗留代码库中遇到了一种多线程模式,它依赖于 Thread.Abort() 方法来取消对外部系统的同时请求。一个不好的后果是很难将超时异常与其他异常类型区分开来。 在多线程控制流中不使用 Thr
我在一个 MVC3 应用程序中有几个长时间运行的线程,它们打算永远运行。 我遇到了一些其他代码(不是我的)正在调用 ThreadAbortException 的问题,我需要从中恢复并重新启动线程。现在
据我们所知,Server.Transfer执行时抛出 ThreadAbortException。 此外,ThreadAbortException 继承异常: 那么为什么异常不会进入 catch blo
我有一个 WCF 服务,该服务接受请求并针对每个请求进行 HTTPWebRequest 调用并返回响应。我使用 BlockingCollection 来存储传入的请求,并使用一个单独的线程处理(生成
我遇到了一个奇怪的错误。我有大约 100 个长时间运行的任务,我想同时运行其中的 10 个。 我在这里找到了与我的需求非常相似的东西:http://msdn.microsoft.com/en-us/l
如果我尝试使用控制台应用程序中的线程一次执行 >100 个数据库插入,我会收到以下错误。根据当前架构,我需要一次插入一条记录。对于较少数量的记录 (10-30),错误不会发生。一次插入这么多记录是否会
下面的代码仅用于说明问题。请忽略使用 CodeDom 编译源代码的部分。此外,如果您尝试它,它会使“其他进程”可执行文件继续运行并无益地消耗 CPU 时间。 真正的问题是我启动线程,然后中止线程并看到
我读过的所有内容都声称线程中止将在从 ThreadAbortException 结束之前执行 finally block 。我想确认这一点,这样我就可以计划如何处理一些可以无限期挂起的第三方代码。但是
记录异常时忽略 ThreadAbortException 的正确方法是什么? 将它捕获在一个空的捕获块中使其消失是否安全? 最佳答案 如果您需要停止 ThreadAbortException进一步向上
catch (ThreadAbortException) { } catch (Exception ex) { TraceManager.TraceException(ex,
我想检查以下代码是否可以抵抗 ThreadAbortException 并且不会导致孤儿锁。如果不是,避免孤儿锁的最佳模式是什么? ReaderWriterLockSlim _lock = new R
我有一些现有的遗留代码,我想对其进行测试。这是要点的复制: public class LegacyUnit { private readonly ICollaborator collabora
我正在使用 mysql 开发 ASP.NET。访问数据库时出现一些异常(仅在生产中) StackStrace-1: at System.Threading.Thread.AbortInternal()
我正在努力提高一段代码的异常安全性,我意识到引发的 ThreadAbortException 可能会导致意外的资源泄漏,即使在使用 C# using 被使用。 最佳答案 是的,避免这种情况的确定性方法
参见http://support.microsoft.com/kb/312629/EN-US/ 我也在我的应用程序中使用了reponse.direct,但没有收到异常。知识库文章建议的解决方法(Ser
我正在使用 .NET 1.1 兼容模式进行未处理的异常处理。问题是,当 LegacyUnhandledExceptionPolicy 设置为“1”(这是我想要的)时,我无法捕获并吞下 ThreadAb
我目前在 .net c# 4.0 中工作,并且遇到了一些我编写的代码的问题,这让我有些头疼。 我将 System.Threading.Tasks.TaskFactory 类与 System.Threa
我收到错误 Unable to evaluate expression because the code is optimized or a native frame is on the top of
当中止线程的执行时,我总是在优雅退出和这样的事件处理程序之间犹豫不决: int result = WaitHandle.WaitAny(handles); if (result = WAIT_FINA
我是一名优秀的程序员,十分优秀!