.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