これは単なる架空の問題であり、このソリューションが同様のシナリオのすべての範囲で役立つことを願っています。Webページ上のすべての外部リソース(画像、スクリプトなど)の合計サイズをカウントする必要があるとします。ページをダウンロードし、すべての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);
}
これで、何らかの理由でリンクの1つに到達できない場合、TaskEx.WhenAll全体がWebExceptionで中止されます。私が必要としているのは、個々のタスク内のWebExceptionを無視し、その場合は長さ0を想定することです。何か案は?