POO Avancée & Architecture Logicielle avec C#

🚀 Module 6

Programmation Asynchrone & Robustesse

Objectif: gérer la latence, les erreurs et la nullité sans transformer le code en zone grise difficile à diagnostiquer.

POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

📝 Changelog — V0.0.1

  • Création du deck sur le modèle TAP, la robustesse, les exceptions métier et les NRT.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Flux asynchrone et résilience

POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Le modèle TAP

  • Task représente un travail potentiellement futur.
  • async / await transforme le code en machine à états compilée.
  • Le bénéfice principal est la non-blocage des threads, pas la magie de performance.
public async Task<Reservation?> FindAsync(Guid id, CancellationToken ct)
{
    await Task.Delay(10, ct);
    return await repository.GetByIdAsync(id, ct);
}
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Deadlocks et ConfigureAwait

  • En bibliothèques réutilisables, ConfigureAwait(false) évite de capturer un contexte inutile.
  • En ASP.NET Core, il est souvent moins critique car il n'y a pas de contexte UI classique.
  • La règle importante reste: ne jamais faire .Result ou .Wait() sur de l'asynchrone applicatif.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Exceptions professionnelles

  • Une exception métier explique un invariant violé.
  • Une exception technique remonte un incident d'infrastructure.
  • Les deux ne doivent pas être confondues dans le même message.
public sealed class ResourceAlreadyReservedException(Guid resourceId)
    : Exception($"Resource {resourceId} is already reserved for the selected slot.");
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Gestion globale des erreurs

  • Middleware d'exception central côté API.
  • Journalisation structurée.
  • Réponses cohérentes pour le client.
  • Corrélation des erreurs avec un identifiant de requête.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Nullable Reference Types

<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  • Le compilateur devient un allié contre les NullReferenceException.
  • Le coût initial sur les annotations est inférieur au coût des erreurs de prod.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Hygiène asynchrone

  • Propager CancellationToken.
  • Éviter les async void hors événements UI.
  • Nommer explicitement les méthodes asynchrones avec le suffixe Async.
  • Tester les échecs comme les succès.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com