c# - 为什么线程进入休眠模式C#

标签 c# .net multithreading

我的这段代码运行了大约 2 个小时。之后程序停止回答,我在 VS 中暂停它并检查它正在执行哪一行。我在 Parallel 语句中停了下来,说了一些关于“等待线程加入并停止 sleep ”的内容。

很明显,我的多线程经验很少,所以我不知道为什么会这样。 我认为进入 while 的线程将被隔离并等待在 foreach 中启动的所有其他线程。

while (true)
        {
        Parallel.ForEach(servers, server => // It stopped here
        {

            Console.WriteLine(string.Format("Checking: {0} Thread: {1}", server.Hostname, Thread.CurrentThread.ManagedThreadId));
            try
            {
               // Do some network stuff
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        });
}

更新 1

做一些网络的事情是让一些 UDP 发送和接收超时为 1500 毫秒。我这里也有一些基于 Entity Framework 的数据库。所以可能有很多地方会出错。但是我仍然不确定是什么原因造成的。如果套接字(我的 UDP 东西和数据库东西)正在运行并超过超时,它们将引发将被“处理”的异常

这还不够吗?我可以为整个线程设置某种超时吗?如果它没有加入 5000 毫秒杀死它?

最佳答案

“Do some network stuff”将是我首先查看的内容(特别是:它是否有可能无限期地阻塞 - 可能是 Read 而不是流上的超时发送但未关闭)。如果任何“Do some network stuff”代码块,那将阻塞整个 Parallel.ForEach,因为它不会从 .ForEach 返回,直到 every 项目已完成。

找到等待连接的 Parallel.ForEach 并不出乎意料(毕竟 Parallel.ForEach 拆分和连接)-重要的问题是:还发生了什么,即其他线程在做什么。

但是,我还想问一下,是否有人只是简单地按下了键盘上的 pause(这会暂停控制台输出),或者不小心在控制台区域(可以输入复制/粘贴模式,再次暂停控制台输出)。

关于c# - 为什么线程进入休眠模式C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11964716/

相关文章:

c# - 检查 TextBlocks 文本是否为特定颜色

.net - 如何将输出参数从 vb.net 传递到 mysql 存储过程?

.net - 从 CD/DVD 读取速度非常慢,枚举/线程

c# - 线程回调创建线程线程安全吗?

.net - .NET 中什么情况下 GC.WaitForPendingFinalizers() 会阻塞?

c# - 以编程方式登录到 Crystal Reports Server

c# - 在 C# 中用于回归的免费库

.net - System.Reflection - 全局方法不可用于反射

c# - 如何将一批 .NET DLL 反编译为 Visual Studio 项目

c# - 解析器错误消息 : Could not load type 'ObamPortal.Web.MvcApplication'