我有这段代码运行了大约 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 毫秒杀死它?