停止.NET线程池中的所有线程?我在.NET中使用ThreadPool在后台发出一些Web请求,我希望有一个“停止”按钮来取消所有线程,即使它们正在发出请求,所以一个简单的bool不起作用为了那个原因。我怎样才能做到这一点?处理此问题的正确方法是使用您发出信号的标志对象。在这些线程中运行的代码需要定期检查此标志以查看它是否应该退出。例如,ManualResetEvent对象适用于此。然后你可以像这样让线程退出:evt.Set();在线程中,您将像这样检查它:if(evt.WaitOne(0))return;//或以其他方式退出线程其次,由于您使用的是线程池,因此您排队的任何项目仍将被处理,但是如果您将上面的if语句添加到线程方法的最开头,它将退出立即地。如果这还不够好,您应该使用普通线程构建自己的系统,以便您拥有完全的控制权。哦,可以肯定的是,不要使用Thread.Abort。让线程很好地退出,不要直接杀死它们。您的情况几乎是.NET框架中Cancellation模型的典型用例。这个想法是创建一个CancellationToken对象并使其可用于您可能想要取消的操作。您的操作将偶尔检查令牌的IsCancellationRequested属性,或调用ThrowIfCancellationRequested。您可以使用CancellationTokenSource类创建CancellationToken并通过它请求取消。这种取消模型与.NET任务并行库很好地集成并且非常轻量级,使其比使用像ManualResetEvent这样的系统对象更容易(尽管它也是一个非常有效的解决方案)。如果你想停止/取消另一个线程中的某些处理,ThreadPool不是最佳选择,你应该使用Thread,并在容器(如全局List)中管理所有这些以确保你对所有线程具有完全控制权。以上就是C#学习教程:Stopallthreadsin.NETThreadPool?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
