</>
Plan du cours — 42/46

Pièges courants

Avancé
// ❌ .Result / .Wait() bloquent le thread appelant et peuvent causer un deadlock
var utilisateur = RecupererUtilisateurAsync(1).Result;

// ✅ await de bout en bout
var utilisateur = await RecupererUtilisateurAsync(1);

// ❌ oublier le "await" : la tâche démarre mais son résultat/exception est ignoré
_ = SauvegarderAsync(utilisateur);

// ✅ soit on attend, soit on gère explicitement le "fire-and-forget"
await SauvegarderAsync(utilisateur);

Cas pratique : agréger les réponses de plusieurs services externes en parallèle avec un timeout global.

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(3));

var tacheCommandes = RecupererCommandesAsync(userId, cts.Token);
var tacheFavoris = RecupererFavorisAsync(userId, cts.Token);
var tacheNotifications = RecupererNotificationsAsync(userId, cts.Token);

await Task.WhenAll(tacheCommandes, tacheFavoris, tacheNotifications);

var profil = new ProfilComplet(
    tacheCommandes.Result, tacheFavoris.Result, tacheNotifications.Result);