c# - 如何知道线程池中的线程挂起/卡住

标签 c# multithreading threadpool

我有线程池的任务队列,每个任务都有卡住锁定其正在使用的所有资源的倾向。并且除非重新启动服务,否则这些无法释放。

ThreadPool 中有没有办法知道它的线程已经被卡住?我有一个使用超时的想法(虽然我仍然不知道如何写),但我认为它不安全,因为处理的时间长度不统一。

最佳答案

我不想在这里太自以为是,但真正找出问题所在并解决它是解决死锁的最佳方法。

  • 运行服务的调试版本并等待它死锁。它会保持僵局,因为这是死锁的一个奇妙特性。
  • 将 Visual Studio 调试器附加到服务。
  • “全部打破”。
  • 打开您的线程窗口,然后开始探索...

除非你一开始就有合理的架构\设计\理由来选择受害者,否则不要这样做 - 就这样。当线程正在做某件事时,任意地敲打线程的头,这几乎会导致灾难。

关于c# - 如何知道线程池中的线程挂起/卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436939/

相关文章:

c# - 为什么只在线程访问UI控件时在调试时出现异常?

c# - WPF - 如果单击边界外则无法关闭窗口

c# - GetHostEntry 和 GetHostByName 之间的区别?

java - Java中这些短方法必须同步吗?

multithreading - 异步代码 + Async.RunSynchronously 与普通同步代码

python - 在请求库中,如何避免 "HttpConnectionPool is full, discarding connection"警告?

.net - 如何将 JScript Closure 转换为 JScript 中的 .NET 委托(delegate)?

c# - 可以将模拟配置为在任何方法调用上抛出指定的异常吗?

c# - entlib 无效的 TraceListenerData 类型

java - Tomcat 警告 : The executor associated with thread pool [http-apr-8080] has not fully shutdown