繁体   English   中英

如果在C#中花费太长时间,我如何杀死一个线程?

[英]How do I kill a thread if it takes too long in C#?

重复: 杀死一个帖子(C#)


我正在向我的线程传递一个threadstart委托并启动它。

如果我在3秒内没有收到回复,我需要一种方法来杀死这个线程。

完成此任务的最佳方法是什么? 它不一定必须与thread / threadstart一起使用,这就是我到目前为止所使用的内容。

杀死一个线程总是一个坏主意,并且应该保留给你已经处理过你将要杀死的病态进程的场景。 你是否拥有线程中的代码? 也许放入一些状态检查并在标志设置时干净地退出?

如果没有,并且您需要在中止后使用代码,则单独的进程可能比线程启动更安全。 至少你不会削弱你自己的代码(例如,一个未释放的锁,或一个挂起的静态构造函数/类型初始化程序)。

你可以调用myThread.Abort ,它会(通常)杀死线程,但这通常是一个非常糟糕的主意。

将堕胎逻辑放入线程本身通常是更好的选择。 如果线程无法在3秒的时间段内处理其工作,则它可以中止并返回适当的状态。 这是一个更安全的操作,从长远来看将更易于维护。

使用IAsyncResult.AsyncWaitHandle.WaitOne()方法查看此SO解决方案

Thread.Join方法应该有一个TimeSpan参数,使其退出...
在此页面上查找TimeSpan和其他同步方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM