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ń iEventArg
typy 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 iEnd
(na przykładBeginWrite
orazEndWrite
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);
}