如何停止运行阻塞方法的线程

本文关键字:方法 线程 何停止 运行 | 更新日期: 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 ()