gpt4 book ai didi

c# - Task.WaitAll 和异常

转载 作者:IT王子 更新时间:2023-10-29 04:14:39 25 4
gpt4 key购买 nike

我在异常处理和并行任务方面遇到问题。

下面显示的代码启动了 2 个任务并等待它们完成。我的问题是,如果任务抛出异常,则永远不会到达 catch 处理程序。

        List<Task> tasks = new List<Task>();
try
{
tasks.Add(Task.Factory.StartNew(TaskMethod1));
tasks.Add(Task.Factory.StartNew(TaskMethod2));

var arr = tasks.ToArray();
Task.WaitAll(arr);
}
catch (AggregateException e)
{
// do something
}

但是,当我使用以下代码等待超时任务时,异常被捕获。

 while(!Task.WaitAll(arr,100));

我似乎遗漏了一些东西,因为 WaitAll 的文档描述了我第一次尝试成为正确的尝试。请帮助我理解为什么它不起作用。

最佳答案

无法重现这个 - 它对我来说很好:

using System;
using System.Threading;
using System.Threading.Tasks;

class Test
{
static void Main()
{
Task t1 = Task.Factory.StartNew(() => Thread.Sleep(1000));
Task t2 = Task.Factory.StartNew(() => {
Thread.Sleep(500);
throw new Exception("Oops");
});

try
{
Task.WaitAll(t1, t2);
Console.WriteLine("All done");
}
catch (AggregateException)
{
Console.WriteLine("Something went wrong");
}
}
}

正如我所期望的那样打印“出了点问题”。

是否有可能您的一项任务未完成? WaitAll 确实会等待所有任务完成,即使有些任务已经失败。

关于c# - Task.WaitAll 和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4217643/

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