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
Lepaskan: 2025-01-05 03:05:40
asal
666 orang telah melayarinya

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);
});
Salin selepas log masuk

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);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan