我在线程中有线程,最后一个子线程只是挂起,现在 20 小时没有抛出任何东西。我的代码是这样的:
bool end = false;
var t1 = new Thread(() =>
{
// ...
var t2 = new Thread(() =>
{
try
{
foreach(Data data in datas2)
{
foreach(SubData subdata in data.SubDatas)
{
var t3 = new Thread(() =>
{
this.SaveData(subdata.RetrieveData());
}); t3.Start();
if (!t3.Join(1800000))
{
t3.Abort();
throw new TimeoutException("The execution of method is taking too long.");
}
}
}
} catch { throw; }
finally { end = true; }
}); t2.Start();
}); t1.Start();
它永远不会通过finally
块,t2
也不会抛出任何错误。这里发生了什么?
我的代码在 C# 框架 4 中,在 Visual Studio 2010 Pro 中构建。
请帮忙。提前致谢。
编辑:
感谢大家的帮助。我找到了答案,它是
一个无限循环。
由于这个愚蠢的错误,我们的生产停了一周。啊。似乎我们的系统上有一个验证,它只为某些数据创建一个无限循环。感谢大家热心解答这个问题。