C# MSDN处理TPL异常的示例-这是竞争条件吗?
我正在看MSDN@TPL异常处理示例 守则的基本形式是:C# MSDN处理TPL异常的示例-这是竞争条件吗?,c#,race-condition,task-parallel-library,C#,Race Condition,Task Parallel Library,我正在看MSDN@TPL异常处理示例 守则的基本形式是: Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); }); try { task1.Wait(); } catch (AggregateException ae) { throw ae.Flatten(); } 我的问题是:这是比赛条件吗?如果task1在try执行之前抛出,会发生什么情况?我是否错过了阻止这
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();
}
不,第一个例子完全正确 当在任务中引发异常时,它被包装在AggregateException中。只有当另一个线程加入任务时,在本例中通过调用task1.Wait()将异常传播到加入线程。从本质上讲,异常是“存储”的,直到它可以传播回等待反馈的线程