【发布时间】:2011-04-22 09:35:27
【问题描述】:
如果您使用 Thread.Abort 从另一个托管线程中止一个托管线程,CLR 如何实际在另一个线程上抛出异常?看起来很巧妙!
【问题讨论】:
如果您使用 Thread.Abort 从另一个托管线程中止一个托管线程,CLR 如何实际在另一个线程上抛出异常?看起来很巧妙!
【问题讨论】:
我发现了一些关于该主题的有趣链接。 ThreadAbortException 是一种特殊情况,由 CLR 专门处理。
http://mnikoo.net/2007/02/07/the-magic-of-the-clr-threadabortexception/
http://blogs.msdn.com/b/clrteam/archive/2009/04/28/threadabortexception.aspx
【讨论】:
不久前我写了一篇关于此的博客文章。第一部分是关于何时可以中止线程,第二部分是关于它的实际工作方式。
我从未见过任何关于它实际工作原理的正确(在这种情况下是完整的)文档,所以我写了一篇关于它的文章。
关键是 CLR 将使用 SetThreadContext(一个 win32 api)劫持您当前的 IP 并将您移动到一个特殊的存根中,以在您的线程未处于可中止等待状态时设置线程中止。
【讨论】: