.NET には、非同期操作を実行するための 3 つのパターンが用意されています。
タスク ベースの非同期パターン (TAP)。1 つのメソッドを使用して非同期操作の開始と完了を表します。 TAP は .NET Framework 4 で導入されました。 これは、.NET での非同期プログラミングに推奨されるアプローチです。 C# の async キーワードと await キーワード、および Visual Basic の Async 演算子と Await 演算子により、TAP の言語サポートが追加されます。 詳細については、「 タスク ベースの非同期パターン (TAP)」を参照してください。
イベント ベースの非同期パターン (EAP) は、非同期動作を提供するためのイベント ベースのレガシ モデルです。
Asyncサフィックスと 1 つ以上のイベント、イベント ハンドラー デリゲート型、およびEventArg派生型を持つメソッドが必要です。 EAP は .NET Framework 2.0 で導入されました。 新しい開発には推奨されなくなりました。 詳細については、「 イベント ベースの非同期パターン (EAP)」を参照してください。非同期プログラミング モデル (APM) パターン (IAsyncResult パターンとも呼ばれます) は、IAsyncResult インターフェイスを使用して非同期動作を提供するレガシ モデルです。 このパターンでは、非同期操作には
BeginメソッドとEndメソッド (非同期書き込み操作を実装するためのBeginWriteやEndWriteなど) が必要です。 このパターンは、新しい開発では推奨されなくなりました。 詳細については、「 非同期プログラミング モデル (APM)」を参照してください。
パターンの比較
3 つのパターンが非同期操作をモデル化する方法を簡単に比較するには、指定したオフセットから始まる指定されたバッファーに指定した量のデータを読み取る Read メソッドを検討してください。
public class MyClass
{
public int Read(byte [] buffer, int offset, int count);
}
このメソッドに対応する TAP は、次の単一の ReadAsync メソッドを公開します。
public class MyClass
{
public Task<int> ReadAsync(byte [] buffer, int offset, int count);
}
EAP の場合は次の型とメンバーのセットが公開されます。
public class MyClass
{
public void ReadAsync(byte [] buffer, int offset, int count);
public event ReadCompletedEventHandler ReadCompleted;
}
対応する APM は、 BeginRead メソッドと EndRead メソッドを公開します。
public class MyClass
{
public IAsyncResult BeginRead(
byte [] buffer, int offset, int count,
AsyncCallback callback, object state);
public int EndRead(IAsyncResult asyncResult);
}
こちらも参照ください
.NET