C'est mon approche de ne pas utiliser de méthodes et de classes statiques dans les opérations asynchrones - à moins qu'une technique de verrouillage ne soit implémentée pour empêcher les conditions de concurrence.
Désormais, async/wait a été introduit dans le cadre c # 4.5+ - ce qui simplifie les applications multithread et encourage l'interface utilisateur réactive.
Cependant - comme un verrou ne peut/ne doit pas être placé sur une méthode en attente (et je ne le discute pas), cela rend-il maintenant les méthodes statiques utilisant async/wait complètement redondantes?
C'est mon approche de ne pas utiliser de méthodes et de classes statiques dans les opérations asynchrones - à moins qu'une technique de verrouillage ne soit implémentée pour empêcher les conditions de concurrence.
Pourquoi? À moins que vous n'utilisiez réellement shared state, il ne devrait pas y avoir de conditions de concurrence. Par exemple, considérez:
public static async Task<int> GetPageLength(string url)
{
string text = await new WebClient().DownloadStringTaskAsync(url);
return text.Length;
}
Si vous faites avez un état partagé - ou si vous êtes dans une méthode instance sur une instance qui est utilisée par plusieurs threads - vous devez déterminer comment vous le feriez idéalement - voulez votre opération asynchrone fonctionne. Une fois que vous avez décidé du comportement des différentes races, sa mise en œuvre peut être assez simple.