3

我受限于使用 .NET 4.0 框架和 Async CTP 扩展来执行以下操作:

     var dataTasks = _tasks.Select(t => t.GetData(keys));

     var results = TaskEx.WhenAll(dataTasks).Result.ToList();

其中 _tasks 是一个对象列表,每个对象都提供一个 GetData 方法,该方法返回一个. Task<Data>

我的问题是其中一个dataTasks是抛出异常并破坏整体。我希望能够检查每个 dataTask 的结果并检查结果,记录任何异常,然后继续处理任何有效结果。不过,我现在不确定要不要去做。任何帮助将不胜感激。

4

2 回答 2

4

做到这一点的一种方法是使用琐碎ContinueWith()的方法将潜在的故障更改Task<T>为成功的Task<Task<T>>. 如果你WhenAll().Result在那个(或await WhenAll())上使用,你会得到Task<T>[],这正是你所需要的:

var dataTasks = _tasks.Select(t => t.GetData(keys).ContinueWith(c => c));

Task<T>[] results = Task.WhenAll(dataTasks).Result;
于 2013-04-10T18:55:45.320 回答
0

TaskEx.WhenAll(dataTasks)是你的综合任务。它可能有故障。

调用Result它时会引发异常。所以不要那样做。检查ExceptionorIsFaulted属性。

于 2013-04-10T14:45:15.163 回答