首页 >后端开发 >C++ >我如何与并行使用Async/等待Async/等待并发呼叫?

我如何与并行使用Async/等待Async/等待并发呼叫?

Susan Sarandon
Susan Sarandon原创
2025-02-01 03:02:09867浏览

How Can I Safely Use Async/Await with Parallel.ForEach for Concurrent WCF Calls?

使用异步/等待和TPL DataFlow处理并发WCF调用

>

>本文解决了在.NET应用程序中同时同时执行多个异步WCF调用的挑战。 嵌套

await的天真方法通常会导致过早终止和不完整的操作。 Parallel.ForEach解决方案:tpl dataflow

推荐的解决方案利用任务并行库(TPL)数据流框架。 具体而言,使用

为并行的异步操作提供了强大而受控的机制。TransformBlock> ActionBlock>重构代码示例

以下代码演示了如何重构使用

>和

的原始代码进行并发wcf调用:TransformBlock> ActionBlock

>这种方法的好处
<code class="language-csharp">var ids = new List<string> { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };

var getCustomerBlock = new TransformBlock<string, Customer>(
    async i =>
    {
        ICustomerRepo repo = new CustomerRepo();
        return await repo.GetCustomer(i);
    }, new ExecutionDataflowBlockOptions
    {
        MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded // Or specify a limit
    });

var writeCustomerBlock = new ActionBlock<Customer>(c => Console.WriteLine(c.ID));

getCustomerBlock.LinkTo(writeCustomerBlock, new DataflowLinkOptions { PropagateCompletion = true });

foreach (var id in ids)
{
    getCustomerBlock.Post(id);
}

getCustomerBlock.Complete();
writeCustomerBlock.Completion.Wait();</code>

这种方法提供了几个关键优势:

    真正的异步并行性:
  • 它在并行上下文中正确处理异步操作,以防止过早终止。 >提高的效率:
  • >在可用时进行处理,而不是等待所有操作完成。
  • >>可伸缩性和控制: 属性允许控制并发级别,以防止资源耗尽。 在处理大量ID时,这至关重要。
  • >
  • 此方法可确保同时执行异步WCF调用,同时保持正确的错误处理和资源管理,从而提供更可靠,更有效的解决方案。

以上是我如何与并行使用Async/等待Async/等待并发呼叫?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn