Mengendalikan berbilang tugas tak segerak dalam C#
dengan cekapApabila berurusan dengan pelanggan API tak segerak, adalah penting untuk menentukan cara paling berkesan untuk melancarkan berbilang tugas dan menyegerakkan penyiapannya. Artikel ini akan meneroka dua teknik biasa dan memperkenalkan alternatif yang disyorkan untuk prestasi maksimum.
Kaedah biasa
Gunakan Parallel.ForEach
dan .Wait()
:
<code class="language-csharp"> Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());</code>
Pendekatan ini menjalankan operasi secara selari tetapi menyekat setiap urutan tugasan sehingga ia selesai. Oleh itu, jika panggilan rangkaian mengambil banyak masa, urutan akan kekal melahu.
Gunakan Task.WaitAll
:
<code class="language-csharp"> Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());</code>
Kod ini menunggu semua tugasan selesai, menyekat urutan semasa sehingga semua operasi selesai.
Kaedah yang disyorkan
Untuk pelaksanaan tak segerak yang optimum, disyorkan untuk menggunakan Task.WhenAll
:
<code class="language-csharp">public async Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
Kaedah ini memulakan tugasan secara selari dan membenarkan urutan semasa untuk terus melaksanakan tugasan lain sementara menunggu tugasan itu selesai. Ini mengoptimumkan penggunaan CPU dan mengekalkan tindak balas.
Untuk kesederhanaan maksimum kod, tanpa menunggu, kod berikut sudah memadai:
<code class="language-csharp">public Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }</code>
Dengan menggunakan Task.WhenAll
, anda boleh menjalankan berbilang operasi tak segerak secara selari dengan cekap tanpa mengorbankan kecekapan benang atau responsif sistem.
Atas ialah kandungan terperinci Apakah Cara Paling Cekap untuk Mengendalikan Tugasan Async Berbilang dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!