Freigeben über


Asynchrone Programmiermuster

.NET stellt drei Muster zum Ausführen asynchroner Vorgänge bereit:

  • Aufgabenbasiertes asynchrones Muster (TAP), das eine einzelne Methode verwendet, um die Initiierung und Fertigstellung eines asynchronen Vorgangs darzustellen. TAP wurde in .NET Framework 4 eingeführt. Es ist der empfohlene Ansatz für die asynchrone Programmierung in .NET. Die Schlüsselwörter async und await in C# und die Operatoren Async und Await in Visual Basic fügen Sprachunterstützung für TAP hinzu. Weitere Informationen finden Sie unter Aufgabenbasiertes asynchrones Muster (TAP).For more information, see Task-based Asynchronous Pattern (TAP).

  • Ereignisbasiertes asynchrones Muster (EAP), das das ereignisbasierte Legacymodell für die Bereitstellung asynchroner Verhaltensweisen ist. Sie erfordert eine Methode mit dem Async Suffix und einem oder mehreren Ereignissen, Ereignishandler-Delegattypen und von EventArg abgeleiteten Typen. EAP wurde in .NET Framework 2.0 eingeführt. Es wird nicht mehr für Neuentwicklungen empfohlen. Weitere Informationen finden Sie unter ereignisbasiertes asynchrones Muster (EAP).

  • APM-Muster (asynchrones Programmiermodell) ( auch als Muster bezeichnet IAsyncResult ) ist das Legacymodell, das die IAsyncResult Schnittstelle verwendet, um asynchrones Verhalten bereitzustellen. In diesem Muster erfordern asynchrone Vorgänge die Methoden Begin und End (z. B. BeginWrite und EndWrite, um einen asynchronen Schreibvorgang zu implementieren). Dieses Muster wird für die neue Entwicklung nicht mehr empfohlen. Weitere Informationen finden Sie unter Asynchronous Programming Model (APM).

Vergleich von Mustern

Für einen schnellen Vergleich, wie die drei Muster asynchrone Vorgänge modellieren, ziehen Sie eine Read Methode in Betracht, die eine bestimmte Datenmenge in einen bereitgestellten Puffer einliest, beginnend bei einem angegebenen Offset:

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

Das TAP-Gegenstück dieser Methode würde die folgende einzelne ReadAsync Methode verfügbar machen:

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

Das EAP-Gegenstück würde den folgenden Satz von Typen und Membern verfügbar machen:

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

Das APM-Gegenstück würde die BeginRead- und EndRead-Methoden verfügbar machen.

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

Siehe auch