如果你使用Thread.Abort从另一个托管线程中止一个托管线程,CLR如何在另一个线程上实际抛出异常?看起来像一个巧妙的技巧!
答案 0 :(得分:1)
我发现了一些关于这个主题的有趣链接。 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
答案 1 :(得分:1)
我在此前写了一篇博文。第一部分是关于何时可以中止线程,第二部分是关于它如何实际工作。
我从来没有看到任何关于它如何实际工作的正确(在这种情况下,完整)的文档,所以我写了关于它的文章。
jist是CLR将使用SetThreadContext(一个win32 api)来劫持你当前的IP并将你移动到一个特殊的存根来设置线程中止如果你的线程没有处于可中止的等待状态。