如何停止运行阻塞方法的线程
本文关键字:方法 线程 何停止 运行 | 更新日期: 2023-09-27 18:09:06
我正在制作一个服务器应用程序,我正在使用一个线程在一段时间内运行(true)阻塞侦听功能。
如何停止线程?我不能用这种代码:
while(true)
{
BlockingMethod();
if(shouldStop)
return;
}
因为它会一直执行直到BlockingMethod "unblocks"…
这不是一个好的做法,您应该尽可能避免它,但是如果您无法停止BlockingMethod()
,您可以调用Thread.Abort()
方法。
信息在这里:http://msdn.microsoft.com/en-us/library/cyayh29d(v=vs.110).aspx
我建议你试着改变你的BlockingMethod()
的方式,你可以通过一个取消令牌,并以一种优雅的方式中止它。
正如尤瓦尔·伊察科夫所指出的,"如果他通过了一个CancellationToken
,他必须不时地积极检查它。如果方法阻塞,它将无法工作。如果你选择使用Thread.Abort()
,确保你捕获(ThreadAbortException)并设置Thread.ResetAbort
"answers" Task.Run
与一个取消令牌可以照顾它,如果任务在阻塞调用之前被取消" (Pete Garofano)。
使用thread . join (TimeSpan)给线程一个优雅结束的机会,然后使用thread . abort ()