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:
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!