gpt4 book ai didi

c# - 一个线程是否有可能在不抛出异常的情况下就死掉?

转载 作者:行者123 更新时间:2023-12-05 07:57:31 30 4
gpt4 key购买 nike

我在一台生产机器上遇到这样一种情况,我的 Windows 服务中的一个线程似乎只是死掉了,没有抛出异常。到目前为止,我的日志记录还不够详细,无法准确指出它正在死去的代码行;为此,我部署了一个具有更详细日志记录的新版本。但在我找到确凿证据之前,我怀疑我创建新数据库上下文的代码行。

错误是不可预测的,除了它往往发生在高事件期间,并且通常与其他线程抛出数据库超时异常相关(因此我怀疑以上)。我可以处理的异常。死线程我不能。

知道为什么一个线程可能会静静地死掉,或者只是卡住吗?或者该怎么办?

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

最佳答案

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

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

关于c# - 一个线程是否有可能在不抛出异常的情况下就死掉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26958532/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com