gpt4 book ai didi

.net - 如何处理一批任务中的部分成功?

转载 作者:行者123 更新时间:2023-12-04 15:24:06 29 4
gpt4 key购买 nike

我有 3 个应该并行运行的任务。我需要等待所有 3 个,然后继续处理他们的结果。所以像:

var results = await Task.WhenAll(task1, task2, task3);
return process(results);

当所有 3 个任务都成功完成时,这工作正常。但是,如果其中一个失败,我会得到一个一直冒泡的异常。这不是我想要的。如果这些任务中的任何一个抛出 InvalidOperationException我可以继续处理,我只需要 process方法来访问抛出的异常。

我意识到我可以 try...catch在任务中,但这似乎不是黑客攻击。除了语义不正确(任务 DID 失败 - 它不应该成功返回),如果我采用这种方法,由于结果可能成功或返回异常,我将不得不返回自定义类型。 Task<T>然而,对象已经公开了一个异常 channel ,所以我宁愿不做双重任务而只使用已经存在的东西。

最佳答案

您可以像下面的示例一样处理这种情况:

Task<T>[] tasks  = new Task<T>[] { task1, task2, task3 };

try
{
await Task.WhenAll(tasks);
}
catch(InvalidOperationException exception) // If you need to handle any other exception do it
{
// handle it if you wan to
}

// You can use task1.IsFauled to know if current task failed,
// and you can use task1.Exception to know why it failed

return process(tasks.Where(t => !t.IsFauled).ToArray());

关于.net - 如何处理一批任务中的部分成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857350/

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