非同期プログラミングのパターンAsynchronous programming patterns

.NET には、非同期操作を実行するための 3 つのパターンが用意されています。.NET provides three patterns for performing asynchronous operations:

  • タスク ベースの非同期パターン (TAP)。1 つのメソッドを使用して非同期操作の開始と完了を表します。Task-based Asynchronous Pattern (TAP), which uses a single method to represent the initiation and completion of an asynchronous operation. TAP は、.NET Framework 4 で導入されました。TAP was introduced in the .NET Framework 4. .NET で非同期プログラミングを行う場合、これが推奨される方法となります。It's the recommended approach to asynchronous programming in .NET. C# の async キーワードと await キーワード、および Visual Basic の Async 演算子と Await 演算子により、TAP の言語サポートが追加されます。The async and await keywords in C# and the Async and Await operators in Visual Basic add language support for TAP. 詳細については、「タスク ベースの非同期パターン (TAP)」を参照してください。For more information, see Task-based Asynchronous Pattern (TAP).

  • イベント ベースの非同期パターン (EAP) は、非同期動作を提供するための、イベント ベースの従来のモデルです。Event-based Asynchronous Pattern (EAP), which is the event-based legacy model for providing asynchronous behavior. これは、Async サフィックスを持つメソッドと、1 つ以上のイベント、イベント ハンドラー デリゲート型、および EventArg 派生型を必要とします。It requires a method that has the Async suffix and one or more events, event handler delegate types, and EventArg-derived types. EAP は、.NET Framework 2.0 で導入されました。EAP was introduced in the .NET Framework 2.0. 新規の開発では推奨されなくなりました。It's no longer recommended for new development. 詳細については、「イベント ベースの非同期パターン (EAP)」を参照してください。For more information, see Event-based Asynchronous Pattern (EAP).

  • 非同期プログラミング モデル (APM) パターン (IAsyncResult パターンとも呼ばれます) は、IAsyncResult インターフェイスを使用して非同期動作を提供する従来のモデルです。Asynchronous Programming Model (APM) pattern (also called the IAsyncResult pattern), which is the legacy model that uses the IAsyncResult interface to provide asynchronous behavior. このパターンでは、同期操作に BeginEnd メソッドが必要になります (たとえば、非同期書き込み操作を実装するための BeginWriteEndWrite)。In this pattern, synchronous operations require Begin and End methods (for example, BeginWrite and EndWrite to implement an asynchronous write operation). このパターンは、新規の開発では推奨されなくなりました。This pattern is no longer recommended for new development. 詳細については、「非同期プログラミング モデル (APM)」を参照してください。For more information, see Asynchronous Programming Model (APM).

パターンの比較Comparison of patterns

3 つのパターンで非同期操作がどのようにモデリングされるかを簡単に比較するために、指定された量のデータを、指定のバッファーの指定されたオフセットに読み込む Read メソッドを考えます。For a quick comparison of how the three patterns model asynchronous operations, consider a Read method that reads a specified amount of data into a provided buffer starting at a specified offset:

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

TAP のこのメソッドに対応する部分では、次の単一の ReadAsync メソッドが公開されます。The TAP counterpart of this method would expose the following single ReadAsync method:

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

EAP の場合は次の型とメンバーのセットが公開されます。The EAP counterpart would expose the following set of types and members:

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

APM の対応する部分では BeginRead メソッドと EndRead メソッドが公開されます。The APM counterpart would expose the BeginRead and EndRead methods:

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

関連項目See also