Wzorce programowania asynchronicznego

Platforma .NET udostępnia trzy wzorce do wykonywania operacji asynchronicznych:

  • Wzorzec asynchroniczny oparty na zadaniach (TAP), który używa jednej metody do reprezentowania inicjowania i zakończenia operacji asynchronicznej. Tap został wprowadzony w .NET Framework 4. Jest to zalecane podejście do programowania asynchronicznego na platformie .NET. Słowa kluczowe async i await w języku C# oraz operatory Async i Await w Visual Basic dodają obsługę języka tap. Aby uzyskać więcej informacji, zobacz Wzorzec asynchroniczny oparty na zadaniach (TAP).

  • Asynchroniczny wzorzec oparty na zdarzeniach (EAP), który jest starszym modelem opartym na zdarzeniach zapewniającym zachowanie asynchroniczne. Wymaga metody, która ma Async sufiks i co najmniej jedno zdarzenie, typy delegatów programu obsługi zdarzeń i EventArgtypy pochodne. Protokół EAP został wprowadzony w .NET Framework 2.0. Nie jest już zalecane w przypadku nowego programowania. Aby uzyskać więcej informacji, zobacz Wzorzec asynchroniczny oparty na zdarzeniach (EAP).

  • Wzorzec modelu programowania asynchronicznego (APM) (nazywany IAsyncResult również wzorcem), który jest starszym modelem korzystającym z interfejsu IAsyncResult w celu zapewnienia zachowania asynchronicznego. W tym wzorcu operacje synchroniczne wymagają Begin metod i End (na przykład BeginWrite oraz EndWrite implementowania asynchronicznej operacji zapisu). Ten wzorzec nie jest już zalecany w przypadku nowego programowania. Aby uzyskać więcej informacji, zobacz Asynchronous Programming Model (APM).

Porównanie wzorców

Aby zapoznać się z szybkim porównaniem sposobu, w jaki trzy wzorce modelują operacje asynchroniczne, należy wziąć pod uwagę metodę Read , która odczytuje określoną ilość danych do dostarczonego buforu, zaczynając od określonego przesunięcia:

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

Odpowiednik tap tej metody uwidacznia następującą pojedynczą ReadAsync metodę:

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

Odpowiednik protokołu EAP uwidacznia następujący zestaw typów i elementów członkowskich:

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

Odpowiednik APM uwidacznia BeginRead metody i EndRead :

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

Zobacz też