gpt4 book ai didi

c# - MSDN 处理 TPL 异常的示例 - 这是竞争条件吗?

转载 作者:太空狗 更新时间:2023-10-30 00:58:32 24 4
gpt4 key购买 nike

我正在查看来自 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();
}

最佳答案

不,第一个例子是完全有效的。

当在任务中引发异常时,它被包装在 AggregateException 中。只有当另一个线程加入任务时,在此示例中通过调用 task1.Wait() 才会将异常传播到加入线程。本质上,异常会被“存储”,直到它可以传播回等待反馈的线程。

关于c# - MSDN 处理 TPL 异常的示例 - 这是竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com