首頁 > 後端開發 > C++ > 我如何與並行使用Async/等待Async/等待並發呼叫?

我如何與並行使用Async/等待Async/等待並發呼叫?

Susan Sarandon
發布: 2025-02-01 03:02:09
原創
815 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板