我正在制作一个服务器应用程序而且我正在使用一段时间运行的线程(true)阻塞侦听功能。
如何停止线程? 我不能使用这种代码:
while(true)
{
BlockingMethod();
if(shouldStop)
return;
}
因为它将被执行直到BlockingMethod" unblocks" ...
答案 0 :(得分:2)
这不是一个好习惯,如果可能的话你应该避免使用它,但如果你无法阻止Thread.Abort()
,你可以调用BlockingMethod()
方法。
此处的信息:http://msdn.microsoft.com/en-us/library/cyayh29d(v=vs.110).aspx
我建议你尝试以一种可以通过取消令牌的方式更改BlockingMethod()
并以优雅的方式中止它。
正如Yuval Itzchakov指出的那样,“如果他通过CancellationToken
,他必须不时地主动检查它。如果方法阻止,它将无法工作。如果你选择使用Thread.Abort()
,请确保你捕获(ThreadAbortException)并设置Thread.ResetAbort
“和Task.Run
带有取消令牌可以处理它,如果在阻塞调用之前取消了任务”(Pete Garofano)。
答案 1 :(得分:0)
使用Thread.Join(TimeSpan)让线程有机会优雅地结束,然后Thread.Abort()