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

alc*_*cal 3 c# multithreading

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


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

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

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

Mar*_*ell 13

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

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

  • +1让线程本身超时并返回而不是杀死一个健康的线程. (3认同)

Ree*_*sey 5

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

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