Modèles de programmation asynchrone

.NET propose trois modèles d’exécution d’opérations asynchrones :

  • Le modèle asynchrone basé sur les tâches (TAP), qui utilise une méthode unique pour représenter le lancement et l’achèvement d’une opération asynchrone. TAP a été introduit dans .NET Framework 4. Il est recommandé pour la programmation asynchrone dans .NET. Les mots clés async et await en C#, ainsi que les opérateurs Async et Await en Visual Basic, ajoutent au modèle TAP la prise en charge des langages. Pour plus d’informations, consultez Modèle asynchrone basé sur des tâches (TAP).

  • Le modèle asynchrone basé sur les événements (EAP), qui est le modèle hérité basé sur les événements pour fournir un comportement asynchrone. Il nécessite une méthode avec le suffixe Async, ainsi qu’un ou plusieurs événements, des types de délégués de gestionnaire d’événements et des types dérivés de EventArg. EAP a été introduit dans .NET Framework 2.0. Il n’est plus recommandé pour les nouveaux développements. Pour plus d'informations, consultez Modèle asynchrone basé sur des événements (EAP).

  • Le modèle de programmation asynchrone (APM), également appelé modèle IAsyncResult, qui est le modèle hérité qui utilise l’interface IAsyncResult pour fournir un comportement asynchrone. Dans ce modèle, les opérations synchrones nécessitent les méthodes Begin et End (par exemple, BeginWrite et EndWrite pour implémenter une opération d’écriture asynchrone). Ce modèle n’est plus recommandé pour un futur développement. Pour plus d’informations sur la programmation asynchrone, consultez Modèle de programmation asynchrone (APM).

Comparaison des modèles

Pour comprendre rapidement la façon dont chacun des trois modèles modélise les opérations asynchrones, prenons une méthode Read qui lit une quantité de données spécifiée dans une mémoire tampon fournie, en commençant à l'offset spécifié :

public class MyClass  
{  
    public int Read(byte [] buffer, int offset, int count);  
}  

Le modèle TAP de cette méthode exposerait l’unique méthode ReadAsync suivante :

public class MyClass  
{  
    public Task<int> ReadAsync(byte [] buffer, int offset, int count);  
}  

Le modèle EAP exposerait l'ensemble de types et de membres suivant :

public class MyClass  
{  
    public void ReadAsync(byte [] buffer, int offset, int count);  
    public event ReadCompletedEventHandler ReadCompleted;  
}  

Le modèle APM exposerait les méthodes BeginRead et EndRead :

public class MyClass  
{  
    public IAsyncResult BeginRead(  
        byte [] buffer, int offset, int count,
        AsyncCallback callback, object state);  
    public int EndRead(IAsyncResult asyncResult);  
}  

Voir aussi