【发布时间】:2012-08-15 05:58:07
【问题描述】:
我的这段代码运行了大约 2 个小时。之后程序停止回答,我在 VS 中暂停它并检查它在哪一行执行。我在 Parallel 语句中停下来,说了一些关于“等待线程加入并停止睡眠”的内容。
很明显,我的多线程经验很少,所以我不知道为什么会发生这种情况。 我认为进入 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
做一些网络工作是在 1500 毫秒内进行一些 UDP 发送和接收超时。我这里也有一些基于实体框架的数据库。所以很可能会出错。但是我仍然不确定是什么原因造成的。如果套接字(我的 UDP 东西和 DB 东西)正在运行并超过超时,它们将引发一个将被“处理”的异常
这还不够吗?我可以为整个线程设置某种超时。如果它还没有加入 5000 毫秒杀死它?
【问题讨论】:
-
好吧,我不明白。套接字会启动更多线程吗?线程池不是专用于我的程序还是与 .NET 共享?
-
是的,线程池是每个进程的,因此专用于您的程序;但是,如果某些“做一些网络事情”可以无限期地阻止,那将无限期地停止整个
Parallel.ForEach。我们看不到“做一些网络事情”的作用,因此我们无法对此发表评论。
标签: c# .net multithreading