我在線程內部有線程,最後一個子線程只是掛起,現在不會拋出任何東西。我的代碼是這樣的:是什麼導致線程掛起,即使在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();
它從來沒有經歷的t2
的finally
塊,它不會引發任何錯誤。這裏發生了什麼?
我的代碼是在C#中,框架4,構建在Visual Studio 2010專業版。
請幫忙。提前致謝。
編輯:
謝謝大家對你的幫助。我找到了答案,它是
無限循環。
我們的產品爲這個愚蠢的bug停了一個星期。啊。似乎在我們的系統上有一個驗證,只會爲某些數據創建一個無限循環。感謝大家熱衷於解決這個問題。
't3'完成執行嗎?你什麼時候使用'end'變量? – SimpleVar
取決於在SaveData和RetrieveData中發生了什麼 –
@YoryeNathan't3'沒有完成執行。我有另一個線程來檢查't2'是否已經結束。 'end'實際上是一個類型爲'private volatile bool'的類變量。 –