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);