C# & .NET

Comprendre Async, Await et les tâches en C#

L'asynchronisme permet d'attendre efficacement, pas de lancer automatiquement chaque opération dans un nouveau thread.

1 min de lecture Beginner 16 min
C#Async.NET

// vous allez apprendre

  • Expliquer Task et await
  • Composer des opérations asynchrones
  • Propager l'annulation

Ce que représente une Task

Une Task<T> représente la fin future d'une opération qui produit T. Une entrée-sortie asynchrone peut attendre sans occuper un thread pendant toute cette attente. await reprend la méthode à la fin de l'opération ; il ne la parallélise pas automatiquement.

Démarrer les travaux indépendants avant d'attendre

public async Task<string[]> LoadBothAsync(
    HttpClient client, CancellationToken token)
{
    Task<string> first = client.GetStringAsync("/api/first", token);
    Task<string> second = client.GetStringAsync("/api/second", token);
    return await Task.WhenAll(first, second);
}

Les deux opérations HTTP démarrent avant l'attente des résultats. Task.WhenAll se termine lorsque les deux sont terminées. La concurrence doit être limitée lorsque des ressources partagées ou des quotas sont en jeu.

Gérer les erreurs et l'annulation

Transmettez un jeton d'annulation à chaque couche qui le prend en charge. Interceptez une exception seulement pour récupérer ou ajouter du contexte utile. Évitez .Result et .Wait() dans un chemin asynchrone : le blocage gaspille des threads et peut provoquer un interblocage avec certains contextes de synchronisation.

Distinguer calcul et entrée-sortie

Un calcul intensif utilise toujours un thread. Task.Run peut garder une interface de bureau réactive, mais ne crée pas de capacité gratuite sur un serveur web. Mesurez le goulot d'étranglement avant de choisir.

Exercice

Ajoutez un délai de cinq secondes avec CancellationTokenSource. Testez le succès, l'échec d'un point d'accès et l'annulation. Expliquez ce qui arrive à l'autre opération si une tâche échoue.

// le carnet, par e-mail

Apprenez avec moi.

Des idées d'ingénierie qui méritent d'être comprises.