Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengendalikan Operasi Asynchronous dengan betul dalam C# ForEach Loop?

Bagaimana untuk Mengendalikan Operasi Asynchronous dengan betul dalam C# ForEach Loop?

Susan Sarandon
Susan Sarandonasal
2025-01-05 09:38:12376semak imbas

How to Properly Handle Asynchronous Operations within a C# ForEach Loop?

Menyiasat Data dengan Async dan ForEach

Apabila bekerja dengan operasi tak segerak dalam C#, adalah penting untuk memahami cara mengintegrasikannya dengan kod dengan betul blok seperti ForEach. Satu cabaran biasa timbul apabila cuba menggunakan kata kunci Async dalam pernyataan ForEach, yang boleh membawa kepada ralat kompilasi.

Ralat: Async tidak wujud dalam konteks semasa

Seperti yang ditunjukkan dalam coretan kod di bawah, cubaan menggunakan Async dalam pernyataan ForEach mungkin mengakibatkan ralat:

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

Ralat berlaku kerana nama 'Async' tidak wujud dalam konteks semasa. Ini kerana ForEach tidak menyokong perwakilan tak segerak.

Pendekatan Alternatif menggunakan Task.WhenAll

Untuk mengendalikan operasi tak segerak dalam pernyataan ForEach, seseorang boleh menggunakan Task. Kaedah WhenAll. Pendekatan ini melibatkan menayangkan setiap elemen ke dalam operasi tak segerak:

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 yang betul: Kaedah void async tidak boleh ditangkap dengan tangkapan. Task.WhenAll membenarkan pengendalian pengecualian semula jadi.
  • Kesedaran penyelesaian: Dengan menggunakan Task.WhenAll, seseorang boleh menentukan apabila semua operasi tak segerak telah selesai.
  • Natural sintaks untuk mendapatkan semula hasil: GetAdminsFromGroupAsync membayangkan operasi yang menghasilkan hasil, yang boleh dikembalikan secara semula jadi dan bukannya ditetapkan sebagai kesan sampingan.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Operasi Asynchronous dengan betul dalam C# ForEach Loop?. 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