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
<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>
Penambahbaikan utama:
await
. TransformBlock
MaxDegreeOfParallelism
membolehkan paralelisme maksimum, tetapi pertimbangkan untuk menetapkan had untuk pengurusan sumber yang lebih baik dalam persekitaran pengeluaran. DataflowBlockOptions.Unbounded
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!