多个异步/等待链接

如何在C#中进行多个异步/等待链接? 例如, 启动几个HTTP请求,然后不要等待所有这些请求,但在每次完成后启动新请求

最简单的方法是编写一个async方法:

 async Task DownloadAndFollowupAsync(...) { await DownloadAsync(); await FollowupAsync(); } 

然后您可以使用await Task.WhenAll

 await Task.WhenAll(DownloadAndFollowupAsync(...), DownloadAndFollowupAsync(...)); 

如果要对具有有限并行度的项集合执行某些async操作,那么最简单的方法是使用TPL Dataflow中的ActionBlock ,因为它支持async委托(与TPL中的大多数其他并行结构不同,如Parallel.ForEach() )。

 var block = new ActionBlock( url => DownloadAsync(url), new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = few }); foreach (var url in urls) block.Post(url); block.Complete(); await block.Completion; 

您可以将Tasks的ContinueWith扩展方法用于此目的,或者使用Func的扩展,用于返回结果。