- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想检查以下代码是否可以抵抗 ThreadAbortException 并且不会导致孤儿锁。如果不是,避免孤儿锁的最佳模式是什么?
ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
public void DoStaff()
{
_lock.EnterWriteLock();
//Is this place where ThreadAbotException can corrupt my code, or is there JIT optimalization which prevent this from happening???
try
{
...
}
finally
{
_lock.ExitWriteLock();
}
}
根据以下链接 http://chabster.blogspot.cz/2013/07/a-story-of-orphaned-readerwriterlockslim.html ,有(或至少有)可能的方法来创建孤立锁,但我运行了一段时间的示例代码但没有任何运气。
我正在使用 .NET 4.0
Debug 和 Release 中的行为有什么区别吗?
最佳答案
是的,ThreadAbortException
可能会在那里发生,在这种情况下,不会输入 try
,因此您永远不会退出写锁。
这个问题没有好的通用解决方案。这就是为什么 Eric Lippert(以及其他人)说 Locks and exceptions do not mix .
您特别询问了 ThreadAbortException
,这让我相信您正在考虑使用 Thread.Abort
在您的应用程序中进行某种线程控制。我劝你重新考虑。如果你想要取消线程的能力,你应该使用 Cancellation或类似的东西。在最可怕的情况之外的任何其他情况下使用 Thread.Abort
都是一个非常糟糕的主意。它当然不应该成为您程序整体设计的一部分。
关于c# - ReaderWriterLockSlim 是否能抵抗 ThreadAbortException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22821549/
我正在使用 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
我是一名优秀的程序员,十分优秀!