这只是一个想象中的问题,我希望解决方案能够适用于各种类似的场景。假设我需要计算网页上所有外部资源(图片、脚本等)的总大小。我下载页面,提取所有SRC信息,并将URL列表转换为下载任务:
async Task<int> GetTotalSize(Uri uri) {
string[] urls = ... code to extract all external resources' URLs from given page ...
var tasks = from url in urls.Distinct()
select new WebClient().DownloadDataTaskAsync(new Uri(url));
var files = await TaskEx.WhenAll(tasks);
return files.Sum(file => file.Length);
}
现在,如果由于任何原因其中一个链接无法访问,则整个TaskEx.WhenAll将被WebException中止。我需要忽略单个任务中的任何WebExceptions,并在这种情况下假定长度为0。有什么想法吗?