Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menggunakan async/menunggu dengan paralel.foreach untuk panggilan WCF serentak?

Bagaimanakah saya boleh menggunakan async/menunggu dengan paralel.foreach untuk panggilan WCF serentak?

Susan Sarandon
Susan Sarandonasal
2025-02-01 03:02:09865semak imbas

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

mengendalikan panggilan WCF serentak menggunakan async/menunggu dan tpl dataflow

Artikel ini menangani cabaran dengan selamat dan efisien melaksanakan pelbagai panggilan WCF yang tidak segerak serentak dalam aplikasi .NET. Pendekatan naif bersarang

dalam await sering membawa kepada penamatan pramatang dan operasi tidak lengkap. Parallel.ForEach

Penyelesaian: TPL Dataflow

Penyelesaian yang disyorkan memanfaatkan kerangka Dataflow Perpustakaan Tugas Paralel (TPL). Khususnya, menggunakan

dan TransformBlock menyediakan mekanisme yang mantap dan terkawal untuk operasi asynchronous selari. ActionBlock

Contoh kod refactored

Kod berikut menunjukkan cara refactor kod asal untuk menggunakan

dan TransformBlock untuk panggilan WCF serentak: 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>
faedah pendekatan ini

Pendekatan ini menawarkan beberapa kelebihan utama:

  • Paralelisme Asynchronous Benar: Ia betul mengendalikan operasi asynchronous dalam konteks selari, mencegah penamatan pramatang.
  • Kecekapan yang lebih baik: Hasil diproses kerana ia tersedia, dan bukannya menunggu semua operasi selesai.
  • Skalabilitas dan kawalan: Hartanah membolehkan mengawal tahap kesesuaian, mencegah keletihan sumber. Ini penting apabila berurusan dengan sebilangan besar ID. MaxDegreeOfParallelism
Kaedah ini memastikan bahawa panggilan WCF tak segerak dilaksanakan secara serentak sambil mengekalkan pengendalian ralat yang betul dan pengurusan sumber, menyediakan penyelesaian yang lebih dipercayai dan cekap.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan async/menunggu dengan paralel.foreach untuk panggilan WCF serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn