4
我看TPL異常處理例如從MSDN @MSDN處理來自TPL的異常的示例 - 這是一個競爭條件嗎?
http://msdn.microsoft.com/en-us/library/dd537614(v=VS.100).aspx
代碼的基本形式是:
Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); });
try
{
task1.Wait();
}
catch (AggregateException ae)
{
throw ae.Flatten();
}
我的問題是:這是一個競爭條件?如果task1在try執行之前拋出會發生什麼?我是否錯過了阻止這場比賽的事情?
它不應該被寫成這樣:
try
{
Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); });
task1.Wait();
}
catch (AggregateException ae)
{
throw ae.Flatten();
}