【发布时间】:2017-10-01 12:25:16
【问题描述】:
我有一个创建多个基于 I/O 的任务的解决方案,我正在使用 Task.WhenAny() 来管理这些任务。但通常很多任务会因为网络问题或请求限制等而失败。
在使用 Task.WhenAny() 方法时,我似乎找不到使我能够成功重试失败任务的解决方案。
这是我正在做的事情:
var tasks = new List<Task<MyType>>();
foreach(var item in someCollection)
{
task.Add(GetSomethingAsync());
}
while (tasks.Count > 0)
{
var child = await Task.WhenAny(tasks);
tasks.Remove(child);
???
}
所以上述结构适用于完成任务,但我还没有找到处理和重试失败任务的方法。 await Task.WhenAny 抛出 AggregateException 而不允许我检查任务状态。当在异常处理程序中,我不再有任何方法可以重试失败的任务。
【问题讨论】:
-
你能澄清一下你的任务有什么区别吗?目前,您似乎有相同任务的列表。也许您正在向
GetSomethingAsync()传递一些不同的参数? -
@Sergey,是的,我正在向 GetSomethingAsync 传递一个独特的参数,在重试任务时我需要能够引用它。
标签: c# async-await