我有一個在C#.Net 4.5中創建的應用程序。我正在通過任務類使用多線程。我想添加一些錯誤處理。具體而言,我希望有任何例外可以鼓舞到我的應用程序的頂部。帶任務和異常處理的多線程
我被卡住的地方是在使用任務時如何處理未處理的異常或任何事情。
我一直在看這頁http://msdn.microsoft.com/en-us/library/dd997415(v=vs.110).aspx。我的理解是,如果我有多個任務正在運行,並且發生錯誤,我必須等到Task.WaitAll(someTask)被調用並且可以在那裏處理 - 是否正確?在等待Task.WaitAll(someTask)之前,在一個任務中發生錯誤以取消所有其他任務時可能嗎?
下面是我的代碼片段。我猜嵌套任務的原理同樣適用,我必須等到兩個Task.WAitAll()都被調用後才能處理我的錯誤?我對這個應用程序的方法相當簡單,我想要記錄任何被拋出的執行,然後關閉應用程序。只是不確定這是如何處理任務。
也正確的方式,我創建兩個TaskFactory的?兩種方法都在不同的類別中。
public void RunTimePeriods()
{
_taskFactory = new TaskFactory();
Task[] taskTimePeriod = new Task[_timePeriods.Length];
for (int i = 0; i < taskTimePeriod.Length; i++)
taskTimePeriod[i] = _taskFactory.StartNew(_timePeriods[i].RunIndicators);
Task.WaitAll(taskTimePeriod);
}
public void RunIndicators()
{
_taskFactory = new TaskFactory();
Task[] taskIndicator = new Task[_indicator.Length];
for (int i = 0; i < taskIndicator.Length; i++)
taskIndicator[i] = _taskFactory.StartNew(_indicator[i].Run);
}
你爲什麼要創建兩個工廠?你能否提供更多關於使用的兩種「運行」方法的細節。什麼是'_indicator' – faizanjehangir
不確定。只是認爲這可能是一個錯誤,因爲我發佈這個問題,因此最後一行。如果你只使用一個然後不管? – mHelpMe
查看此鏈接:http://msdn.microsoft.com/en-us/library/dd537607.aspx;您可以在子線程中拋出ThrowIfCancellationRequested,並在主線程上等待(Wait),然後取消主任務和所有子任務。 –