Rumah >pembangunan bahagian belakang >C++ >Bagaimana Menggunakan Operasi Async dengan Betul dalam Gelung ForEach dalam C#?

Bagaimana Menggunakan Operasi Async dengan Betul dalam Gelung ForEach dalam C#?

DDD
DDDasal
2025-01-05 16:58:40134semak imbas

How to Properly Use Async Operations within a ForEach Loop in C#?

Menggunakan Async dengan ForEach

Apabila cuba menggunakan operasi async dalam gelung ForEach, seseorang mungkin menghadapi isu menerima ralat yang serupa dengan "Nama 'Async' tidak wujud dalam konteks semasa." Ini kerana List.ForEach tidak mudah menampung operasi async.

Untuk menyelesaikan isu ini, adalah disyorkan untuk menayangkan setiap elemen senarai ke dalam operasi tak segerak. Ini boleh dicapai dengan menggunakan kaedah Pilih untuk mencipta koleksi tugasan, setiap satu mewakili operasi tak segerak yang sepadan dengan elemen dalam senarai.

using (DataContext db = new DataLayer.DataContext())
{
    var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid));
    var results = await Task.WhenAll(tasks);
}

Pendekatan ini menawarkan beberapa kelebihan:

  • Pengendalian Ralat Betul: Pengecualian daripada operasi tak segerak tidak boleh ditangkap dengan blok cuba/tangkap. Menggunakan Task.WhenAll memastikan pengecualian disebarkan, membolehkan pengendalian pengecualian semula jadi.
  • Penjejakan Penyelesaian: Dengan menunggu Task.WhenAll, kod menetapkan bahawa semua operasi tak segerak telah selesai. Pengetahuan ini tidak tersedia dengan mudah apabila menggunakan perwakilan void async dengan ForEach.
  • Sintaks Intuitif: Sintaks untuk mendapatkan semula hasil adalah lebih intuitif, kerana GetAdminsFromGroupAsync membayangkan nilai pulangan, membenarkan nilai yang lebih semula jadi gaya pengaturcaraan.

Atas ialah kandungan terperinci Bagaimana Menggunakan Operasi Async dengan Betul dalam Gelung ForEach dalam C#?. 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