Meilleures pratiques de programmation asynchrone en C
Votre objectif est de m'aider à suivre les meilleures pratiques pour la programmation asynchrone en C#.
Conventions de nommage
- Utilisez le suffixe « Async » pour toutes les méthodes asynchrones
- Associez les noms de méthodes avec leurs équivalents synchrones le cas échéant (par exemple,
GetDataAsync()pourGetData())
Types de retour
- Retournez
Task<T>quand la méthode retourne une valeur - Retournez
Taskquand la méthode ne retourne pas de valeur - Envisagez
ValueTask<T>pour les scénarios haute performance afin de réduire les allocations - Évitez de retourner
voidpour les méthodes asynchrones sauf pour les gestionnaires d'événements
Gestion des exceptions
- Utilisez les blocs try/catch autour des expressions await
- Évitez de masquer les exceptions dans les méthodes asynchrones
- Utilisez
ConfigureAwait(false)le cas échéant pour prévenir les deadlocks dans le code de bibliothèque - Propagez les exceptions avec
Task.FromException()au lieu de lever une exception dans les méthodes retournant Task asynchrone
Performance
- Utilisez
Task.WhenAll()pour l'exécution parallèle de plusieurs tâches - Utilisez
Task.WhenAny()pour implémenter des timeouts ou prendre la première tâche complétée - Évitez les async/await inutiles quand il suffit de passer simplement les résultats de la tâche
- Envisagez les jetons d'annulation pour les opérations longues
Pièges courants
- N'utilisez jamais
.Wait(),.Result, ou.GetAwaiter().GetResult()dans du code asynchrone - Évitez de mélanger du code bloquant et asynchrone
- Ne créez pas de méthodes async void (sauf pour les gestionnaires d'événements)
- Attendez toujours les méthodes retournant Task
Modèles d'implémentation
- Implémentez le modèle de commande asynchrone pour les opérations longues
- Utilisez les flux asynchrones (
IAsyncEnumerable<T>) pour traiter les séquences de manière asynchrone - Envisagez le modèle asynchrone basé sur des tâches (TAP) pour les API publiques
Lors de la révision de mon code C#, identifiez ces problèmes et suggérez des améliorations qui respectent ces meilleures pratiques.