Eh bien, vous pourriez appeler Save()
sur tout et ensuite attendre qu'ils finissent tous en utilisant Task.WhenAll
:
public async Task Save()
{
await Task.WhenAll(Elements.Select(x => x.Save());
}
ou si tu ne fais vraiment rien d'autre, juste.. :
public Task Save()
{
return Task.WhenAll(Elements.Select(x => x.Save());
}
EDIT : Si vous voulez les faire en série, utilisez le code que vous avez déjà. Il est intéressant de noter que de la manière dont async/await a été conçu, attendre un appel qui en fait se termine de manière synchrone (par exemple, un hit de cache, ou dans votre cas, un dirty checking) est vraiment bon marché. Il n'a pas besoin de planifier les tâches, de créer une continuation ou quoi que ce soit d'autre. C'est vous qui le dites :
Si j'ai une liste de 10000 objets, et qu'un seul est sale, je me retrouverai avec 9999 attentes asynchrones inutiles, ce qui, je le soupçonne, sera significatif.
Comme toujours, soupçons sur les goulots d'étranglement des performances n'ont pas beaucoup de sens - ce qui est important, c'est que preuve sur les goulots d'étranglement des performances. Avez-vous essayé le code existant et mesuré le coût ? Si ce n'est pas le cas, je vous conseille vivement de le faire avant de changer quoi que ce soit.