假设使用一个异步API客户端,它返回Task或Task
<code class="language-csharp">static async Task DoSomething(int siteId, int postId, IBlogClient client) { await client.DeletePost(siteId, postId); // 调用API客户端 Console.WriteLine("已删除帖子 {0}.", siteId); }</code>
目标是同时启动多个异步任务并等待它们完成。两种常用的方法是Parallel.ForEach和Task.WaitAll。
虽然Parallel.ForEach和Task.WaitAll都尝试并行执行任务,但它们存在局限性。
为了克服这些限制,我们建议使用Task.WhenAll,它可以异步并行执行任务。以下代码演示了它的用法:
<code class="language-csharp">public async Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
在这种情况下,由于任务完成后没有后续操作,因此不需要await。以下简化的代码就足够了:
<code class="language-csharp">public Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
有关这些方法的更多见解和比较,请参阅综合博客文章:“如何以及在何处使用ASP.NET Web API进行并发异步I/O”。
以上是如何在 C# 中高效地使用 Async/Await 执行多个并行任务?的详细内容。更多信息请关注PHP中文网其他相关文章!