Rumah > pembangunan bahagian belakang > C++ > Bolehkah Operasi Async Digunakan dengan ForEach, dan Apakah Alternatif Terbaik?

Bolehkah Operasi Async Digunakan dengan ForEach, dan Apakah Alternatif Terbaik?

Patricia Arquette
Lepaskan: 2025-01-05 18:41:40
asal
409 orang telah melayarinya

Can Async Operations Be Used with ForEach, and What's the Best Alternative?

Menggunakan Async dalam ForEach

Soalan:

Adakah ia boleh menggunakan fungsi async dalam konteks ForEach? Coretan kod yang menggambarkan percubaan pelaksanaan disediakan di bawah:

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

Walau bagaimanapun, selepas pelaksanaan, ralat berikut timbul:

The name 'Async' does not exist in the current context
Salin selepas log masuk

Perhatikan bahawa kaedah yang merangkum pernyataan penggunaan telah ditetapkan sebagai async.

Jawapan:

Pelaksanaan ForEach yang digunakan oleh List tidak serasi secara semula jadi dengan kefungsian async (serupa dengan LINQ-to-objects).

Untuk senario khusus ini, adalah dinasihatkan untuk meneruskan pendekatan alternatif. Ini melibatkan penayangan setiap elemen ke dalam operasi tak segerak. Selepas itu, penyiapan operasi ini boleh ditunggu secara tak segerak.

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

Pendekatan ini menawarkan beberapa kelebihan berbanding menggunakan perwakilan async dengan ForEach:

  • Pengendalian Ralat Dipertingkat: Pengecualian yang berasal daripada operasi async void tidak boleh dikendalikan dengan tangkapan. Sebagai alternatif, kaedah ini akan menyebarkan pengecualian pada baris di mana Task.WhenAll ditunggu, membolehkan keupayaan pengendalian pengecualian semula jadi.
  • Keterlihatan Selesai: Kesimpulan tugasan mudah dilihat pada akhir kaedah ini disebabkan penggunaan Task.WhenAll. Sebaliknya, operasi async void tidak mempunyai cara mudah untuk menentukan penyiapan.
  • Sintaks Semulajadi: Pendekatan ini sejajar dengan sintaks semula jadi untuk mendapatkan semula hasil. GetAdminsFromGroupAsync membayangkan operasi yang menghasilkan hasil (pentadbir), menjadikan kod ini lebih intuitif apabila operasi sedemikian boleh mengembalikan penemuannya dan bukannya bergantung pada kesan sampingan untuk menetapkan nilai.

Atas ialah kandungan terperinci Bolehkah Operasi Async Digunakan dengan ForEach, dan Apakah Alternatif Terbaik?. 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