Asynchrone programmeerpatronen

.NET biedt drie patronen voor het uitvoeren van asynchrone bewerkingen:

  • Asynchroon patroon (TAP) op basis van taken, waarbij één methode wordt gebruikt om de start en voltooiing van een asynchrone bewerking aan te geven. TAP is geïntroduceerd in .NET Framework 4. Het is de aanbevolen benadering voor asynchrone programmering in .NET. De asynchrone trefwoorden in C# en de operators Async en Await in Visual Basic taalondersteuning voor TAP toevoegen. Zie Asynchroon Asynchroon patroon (TAP) op basis van taken voor meer informatie.

  • Asynchroon Asynchroon patroon (EAP) op basis van gebeurtenissen. Dit is het verouderde model op basis van gebeurtenissen voor het bieden van asynchroon gedrag. Hiervoor is een methode vereist met het Async achtervoegsel en een of meer gebeurtenissen, gebeurtenishandlerdelegentypen en EventArgafgeleide typen. EAP is geïntroduceerd in .NET Framework 2.0. Het wordt niet meer aanbevolen voor nieuwe ontwikkeling. Zie Asynchroon Asynchroon patroon (EAP) voor meer informatie.

  • Asynchroon programmeermodelpatroon (APM) (ook wel het IAsyncResult patroon genoemd), het verouderde model dat gebruikmaakt van de IAsyncResult interface om asynchroon gedrag te bieden. In dit patroon vereisen Begin synchrone bewerkingen en End methoden (bijvoorbeeld BeginWrite om EndWrite een asynchrone schrijfbewerking te implementeren). Dit patroon wordt niet meer aanbevolen voor nieuwe ontwikkeling. Zie Asynchroon programmeermodel (APM) voor meer informatie.

Vergelijking van patronen

Voor een snelle vergelijking van de manier waarop asynchrone bewerkingen van het model met drie patronen worden gebruikt, kunt u een Read methode overwegen waarmee een opgegeven hoeveelheid gegevens in een opgegeven buffer wordt gelezen, te beginnen bij een opgegeven offset:

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

De TAP-tegenhanger van deze methode zou de volgende enkele ReadAsync methode beschikbaar maken:

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

De EAP-tegenhanger zou de volgende set typen en leden beschikbaar maken:

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

De APM-tegenhanger zou de BeginRead en EndRead methoden beschikbaar maken:

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

Zie ook