Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh melakukan pelbagai panggilan WCF yang tidak segerak serentak dalam C#?

Bagaimanakah saya boleh melakukan pelbagai panggilan WCF yang tidak segerak serentak dalam C#?

DDD
Lepaskan: 2025-02-01 02:56:11
asal
807 orang telah melayarinya

How Can I Perform Multiple Asynchronous WCF Calls Concurrently in C#?

dengan cekap mengendalikan pelbagai panggilan WCF asynchronous dengan TPL Dataflow

Apabila berurusan dengan pelbagai panggilan WCF tidak segerak dalam C#,

tidak sesuai kerana ia tidak menyokong langsung Parallel.ForEach. Penyelesaian yang lebih mantap adalah untuk memanfaatkan Dataflow Perpustakaan Paralel Tugas (TPL Dataflow) yang cemerlang dalam mengurus operasi tak segerak. await

Contoh ini menunjukkan cara menulis semula kod menggunakan TPL DataFlow untuk panggilan WCF tidak segerak serentak:

<code class="language-csharp">// Create a TransformBlock to asynchronously fetch Customer data.
var getCustomerBlock = new TransformBlock<string, Customer>(
    async id =>
    {
        ICustomerRepo repo = new CustomerRepo();
        return await repo.GetCustomer(id);
    }, new ExecutionDataflowBlockOptions
    {
        MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded // Adjust as needed
    });

// Create an ActionBlock to process each retrieved Customer.
var writeCustomerBlock = new ActionBlock<Customer>(c => Console.WriteLine(c.ID));

// Link the blocks; PropagateCompletion ensures the pipeline finishes.
getCustomerBlock.LinkTo(writeCustomerBlock, new DataflowLinkOptions { PropagateCompletion = true });

// Post IDs to the TransformBlock.
foreach (var id in ids)
{
    getCustomerBlock.Post(id);
}

// Signal completion and wait for all processing to finish.
getCustomerBlock.Complete();
writeCustomerBlock.Completion.Wait();</code>
Salin selepas log masuk

Penambahbaikan utama:

  • pemprosesan asynchronous: Dataflow TPL secara inheren mengendalikan operasi tak segerak () dalam await. TransformBlock
  • Paralelisme yang dikawal: membolehkan anda mengawal tahap kesesuaian, menghalang keletihan sumber dengan dataset yang besar. MaxDegreeOfParallelism membolehkan paralelisme maksimum, tetapi pertimbangkan untuk menetapkan had untuk pengurusan sumber yang lebih baik dalam persekitaran pengeluaran. DataflowBlockOptions.Unbounded
  • Struktur yang lebih baik: Kod ini lebih modular dan boleh dibaca, memisahkan pengambilan data dan pemprosesan ke dalam blok yang berbeza.
  • output streaming: Hasil diproses dan ditulis ke konsol ketika mereka tersedia, dan bukannya menunggu semua operasi selesai.
  • Pengendalian ralat: (tidak ditunjukkan, tetapi mudah ditambah) TPL Dataflow menyediakan mekanisme untuk mengendalikan pengecualian yang mungkin berlaku semasa operasi tak segerak.
Pendekatan ini menawarkan cara yang lebih efisien dan mudah diurus untuk mengendalikan banyak panggilan WCF asynchronous serentak berbanding menggunakan

dengan panggilan bersarang Parallel.ForEach. Ingatlah untuk menyesuaikan await berdasarkan sumber sistem anda dan saiz koleksi MaxDegreeOfParallelism anda. ids

Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan pelbagai panggilan WCF yang tidak segerak serentak dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan