c#5 で新しい async/await keyworks を使用することを検討しており、この記事を読んでいます
次の例が表示されます
async void ArchiveDocuments(List<Url> urls)
{
Task archive = null;
for(int i = 0; i < urls.Count; ++i)
{
var document = await FetchAsync(urls[i]);
if (archive != null)
await archive;
archive = ArchiveAsync(document);
}
}
おそらく、URL リストが非常に長い場合、スレッドが制御不能になる状況に陥る可能性があります。
私が知りたいのは、使用されるスレッドの数を制御するための推奨される方法です。スレッドプールまたは最大数を指定する方法はありますか?
TPL を使用すると、オプションを使用してスレッドの最大数 ParallelOptions.MaxDegreeOfParallelism を制御できます。おそらく、 await と Task を組み合わせる何らかの方法が可能かもしれません。