dalam await
sering membawa kepada penamatan pramatang dan operasi tidak lengkap. Parallel.ForEach
dan TransformBlock
menyediakan mekanisme yang mantap dan terkawal untuk operasi asynchronous selari. ActionBlock
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>
MaxDegreeOfParallelism
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!