Question :
Est-il possible d'utiliser la fonctionnalité asynchrone dans le contexte de ForEach ? Un extrait de code illustrant la tentative d'implémentation est fourni ci-dessous :
using (DataContext db = new DataLayer.DataContext()) { db.Groups.ToList().ForEach(i => async { await GetAdminsFromGroup(i.Gid); }); }
Cependant, lors de l'exécution, l'erreur suivante se produit :
The name 'Async' does not exist in the current context
Notez que la méthode encapsulant l'instruction using a été désignée comme asynchrone.
Réponse :
La mise en œuvre de ForEach employé par List
Pour ce scénario spécifique, il est conseillé d'adopter une approche alternative. Cela implique de projeter chaque élément dans une opération asynchrone. Par la suite, l'achèvement de ces opérations peut être attendu de manière asynchrone.
using (DataContext db = new DataLayer.DataContext()) { var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid)); var results = await Task.WhenAll(tasks); }
Cette approche offre plusieurs avantages par rapport à l'utilisation d'un délégué asynchrone avec ForEach :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!