Rumah >pembangunan bahagian belakang >C++ >Bagaimana cara menggunakan Async dengan ForEach dengan betul dalam C#?

Bagaimana cara menggunakan Async dengan ForEach dengan betul dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 03:05:40675semak imbas

How to Correctly Use Async with ForEach in C#?

Menggunakan Async dengan ForEach dalam C#

Apabila menggunakan kaedah ForEach dengan operasi tak segerak, adalah penting untuk memahami batasannya. Dalam kod anda:

db.Groups.ToList().ForEach(i => async {
    await GetAdminsFromGroup(i.Gid);
});

Ralat pengkompil yang anda hadapi, "Nama 'Async' tidak wujud dalam konteks semasa," menunjukkan bahawa anda tidak boleh menggunakan async terus dalam ungkapan lambda bukan tak segerak.

Penyelesaian:

Untuk mengatasi masalah ini, unjurkan setiap elemen ke dalam tak segerak operasi dan tunggu semuanya selesai:

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

Faedah Pendekatan ini:

  • Pengendalian Ralat Betul: Pengecualian daripada async void tidak dapat ditangkap, tetapi pendekatan ini menyebarkannya pada baris Task.WhenAll yang menunggu, membenarkan pengecualian semula jadi pengendalian.
  • Penjejakan Selesai: Pendekatan ini jelas menunjukkan apabila operasi selesai, tidak seperti async void, yang menjadikan perbezaan ini sukar untuk dijejaki.
  • Sintaks Semulajadi : GetAdminsFromGroupAsync membayangkan operasi mengembalikan hasil, menjadikan kod lebih intuitif dan boleh diselenggara.

Atas ialah kandungan terperinci Bagaimana cara menggunakan Async dengan ForEach dengan betul 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