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 enEventArg
afgeleide 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 enEnd
methoden (bijvoorbeeldBeginWrite
omEndWrite
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);
}