为什么下面的代码在控制台应用程序中运行时会崩溃,而不是抛出AggregateException并被外部try/catch捕获?
为了简洁起见,我已经简化了使用await的用例,但在相关代码中,我确实尝试执行一个重要的可等待任务(awaitable Task)。
为了简洁起见,我已经简化了使用await的用例,但在相关代码中,我确实尝试执行一个重要的可等待任务(awaitable Task)。
var list = new List<string>() {"Error"};
try
{
Parallel.ForEach(list, new ParallelOptions()
{
MaxDegreeOfParallelism = 8
}, async listEntry =>
{
await Task.Delay(5000);
throw new Exception("Exception");
});
}
catch (Exception ex)
{
//never hits, the application crashes
}
Console.ReadLine();
我注意到以下内容不会导致应用程序失败,确实捕获了异常,但我不理解两种情况之间根本的不同之处:
请注意,以下内容不会导致应用程序失败,并且确实捕获了异常,但我不明白两个上下文在根本上有什么不同:
var list = new List<string>() {"Error"};
try
{
Parallel.ForEach(list, new ParallelOptions()
{
MaxDegreeOfParallelism = 8
}, listEntry =>
{
throw new Exception("Exception");
});
}
catch (Exception ex)
{
//exception is caught, application continues
}
Console.ReadLine();
Parallel.ForEach
与async/await
混合使用 https://dev59.com/aWgu5IYBdhLWcg3wHjl7 - user585968Task.WhenAll
- https://dev59.com/Cmct5IYBdhLWcg3wHJ3F) - Alexei LevenkovTask.Delay(5000)
。循环不会提前结束。 - Grant H.