csharp-async

Par github · awesome-copilot

Obtenir les meilleures pratiques pour la programmation asynchrone en C#

npx skills add https://github.com/github/awesome-copilot --skill csharp-async

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() pour GetData())

Types de retour

  • Retournez Task<T> quand la méthode retourne une valeur
  • Retournez Task quand 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 void pour 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.

Skills similaires