Sil*_*ent 22 c# multithreading
如果我需要取消一个线程一些操作,我什么时候应该使用Thread.AbortVS Thread.Interrupt.我阅读了有关它的文档,但不确定哪个scneario我应该使用两个之间的特定调用.
如果有任何第三种方式,请让我知道它与赞成和利弊.
Bri*_*eon 21
我会Thread.Abort不惜一切代价避免使用.自从.NET 2.0以来,它的行为更加安全和可预测,但它仍然存在一些非常严重的陷阱.托管代码中的大多数中止都可以安全,但不是全部.例如,我相信如果在处理静态构造函数期间触发中止请求,则存在一些微妙的问题.没关系,事实上,带外异常可以在任何时候发生,使您无法控制定义关闭安全点所在的位置.
有几种可以接受的方法可以优雅地终止线程.
Thread.InterruptWaitHandle事件我在这里的答案中讨论了这些方法.
大多数建议已经完成,但这里有一个例子我将如何做:
ManualResetEvent _requestTermination = new ManualResetEvent(false);
Thread _thread;
public void Init()
{
_thread = new Thread(() =>
{
while (!_requestTermination.WaitOne(0))
{
// do something usefull
}
}));
_thread.Start();
}
public void Dispose()
{
_requestTermination.Set();
// you could enter a maximum wait time in the Join(...)
_thread.Join();
}
Run Code Online (Sandbox Code Playgroud)
这样处理将等待线程退出.