Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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,在一台生产机器上,我的Windows服务中的线程似乎只是死掉了,没有抛出异常。到目前为止,我的日志记录还不够详细,无法精确地指出它即将消亡的代码行;为此,我部署了一个更详细的日志记录的新版本。但在我得到确凿证据之前,我的怀疑落在我创建新DB上下文的代码线上 这个错误是不可预测的,除非它往往发生在高活动期间,并且经常与其他抛出DB timeout异常的线程相关(因此我怀疑上面的错误)。我能处理例外情况。死线,我不能 你知道为什么一条线会静静地死去,或者干脆冻结吗?或者怎么办 编辑:为了清楚起见,代

在一台生产机器上,我的Windows服务中的线程似乎只是死掉了,没有抛出异常。到目前为止,我的日志记录还不够详细,无法精确地指出它即将消亡的代码行;为此,我部署了一个更详细的日志记录的新版本。但在我得到确凿证据之前,我的怀疑落在我创建新DB上下文的代码线上

这个错误是不可预测的,除非它往往发生在高活动期间,并且经常与其他抛出DB timeout异常的线程相关(因此我怀疑上面的错误)。我能处理例外情况。死线,我不能

你知道为什么一条线会静静地死去,或者干脆冻结吗?或者怎么办


编辑:为了清楚起见,代码被try-catch块包围,catch执行一些日志记录(使用log4net)。“最终”也是如此。我知道它在工作,因为其他线程在抛出异常时留下了日志。我在日志中看到的只是线程x到达某个调试点,然后就再也看不到或听不到线程x了,而且它应该做的工作仍然没有完成。

如果您可以访问系统,我将使用它进行调试:Visual Studio 2013远程调试器。如果不能在开发环境中重现错误,这通常是一个很好的选择

线程不会静默地冻结或崩溃,请检查代码中是否有一些空的
catch
块,或者它是否运行在无限循环中(或者在任何时候都有很长的超时时间)

也许你有一些代码给我们。

不,不是真的(但有点)。线不会死,它会结束。一个线程可以成功完成,也可以失败完成——如果一个线程失败,那么它的异常将被存储,直到它被处理为止。根据您实例化线程的方式,您可能会“触发并忘记”,这意味着如果发生异常,您没有代码来处理和检索它。这是非常糟糕的,因为它会导致未发布的资源(它们正在等待您检索和处理异常)


但是,您尚未提供您诊断的任何详细信息。您使用的线程方法/框架是什么(有很多)?您是否在观察进程线程并看到它突然消失?您是在拍摄堆快照,还是在运行的进程似乎已死亡后附加到该进程?

什么是“死亡”?你确定它完成了执行吗?很可能是死锁。所述DB上下文的超时设置是多少。。?你能展示一段实际的代码吗。。?也许您的异常处理可以进一步深入。。很难在没有看到任何现有代码的情况下真正确定,因为线程不能只是消失,而是需要由操作系统实际终止,我不认为这可以在不引发异常的情况下完成。@ShaulBehr:不,CLR不会引发异常@史蒂文汉南德斯:“内存耗尽”-这听起来更像是一个错误。