Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果一个线程在C#中花费的时间太长,我如何杀死它?_C#_Multithreading - Fatal编程技术网

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

如果一个线程在C#中花费的时间太长,我如何杀死它?,c#,multithreading,C#,Multithreading,重复: 我当前正在向我的线程传递threadstart委托并启动它 我需要一种方法来杀死这个线程,如果我没有收到来自它的响应在3秒钟内 实现这一目标的最佳方式是什么?它不一定要与thread/threadstart一起使用,这正是我到目前为止一直在使用的方法。杀死一个线程总是一个坏主意,应该保留在您已经在处理一个无论如何都要杀死的病态进程的情况下。你拥有线程中的代码吗?如果设置了标志,可能会进行一些状态检查并干净地退出 如果不是,并且您需要代码在中止后工作,则单独的进程可能比线程启动更安全。至

重复:
我当前正在向我的线程传递threadstart委托并启动它

我需要一种方法来杀死这个线程,如果我没有收到来自它的响应在3秒钟内


实现这一目标的最佳方式是什么?它不一定要与thread/threadstart一起使用,这正是我到目前为止一直在使用的方法。

杀死一个线程总是一个坏主意,应该保留在您已经在处理一个无论如何都要杀死的病态进程的情况下。你拥有线程中的代码吗?如果设置了标志,可能会进行一些状态检查并干净地退出

如果不是,并且您需要代码在中止后工作,则单独的进程可能比线程启动更安全。至少您不会破坏您自己的代码(例如,使用未释放的锁或挂起的静态构造函数/类型初始值设定项)。

您可以调用,这将(通常)杀死线程,但这通常是一个非常糟糕的主意


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

使用IAsyncResult.AsyncWaitHandle.WaitOne()方法检查此操作。

线程。Join方法应该有一个TimeSpan参数以使其退出…

查找。

为什么需要在3秒钟后终止线程?这是由于我们使用的第三方组件中存在限制,我们无法访问其源代码。请让它在3秒钟后返回一个特殊响应,表示“我超时”+我让线程本身超时并返回,而不是杀死一个健康的线程。Chris Brumme有一篇关于ThreadAbortException的精彩文章:我们不拥有代码,组件失败并挂起大约1000次调用中的1次,但是它将被调用100000次。这个失败率被认为是可接受的——我们只需要一种方法来隔离失败并终止它……这个组件不是资源密集型的,所以即使在某个过程中杀死它……我也不确定这会导致很多问题。