忽略異步/伺機解決方案是有這些2臺代碼之間的任何差異?在這種情況下你真的需要Task.WaitAll嗎?忽略它會有什麼負面影響嗎?Task.WaitAll vs序列化的task.results?
public void ExampleA()
{
Task<object> fooTask = _someFactory.StartFooTask();
Task<object> barTask = _someFactory.StartBarTask();
//misc code ...
_fooResult = fooTask.Result;
_barResult = barTask.Result;
//more misc code ...
}
public void ExampleB()
{
Task<object> fooTask = _someFactory.StartFooTask();
Task<object> barTask = _someFactory.StartBarTask();
//misc code ...
Task.WaitAll(fooTask, barTask);
_fooResult = fooTask.Result;
_barResult = barTask.Result;
//more misc code ...
}
照例a就更有道理了我,尤其是在情況下,其中可能有一些更多的單位計算各種可能會出現一個任務結果可能需要更快然後其他人呢?如果碰巧需要的話,實際上會更早完成。
public void ExampleC()
{
Task<object> fooTask = _someFactory.StartFooTask();
Task<object> barTask = _someFactory.StartBarTask();
//misc code ...
_fooResult = fooTask.Result;
// more misc code requiring _fooResult ...
_barResult = barTask.Result;
// more misc code requiring _barResult...
}
一個問題我用'WaitAll'是,如果有任何的任務異常就會拋出'AggregateException'看到。而在'ExampleA'中,你會知道哪個任務拋出了異常,並且可以有機制來分別處理它們。 –