Export (0) Print
Expand All

Asynchronous Programming Patterns

.NET Framework 4.5

The .NET Framework provides three patterns for performing asynchronous operations:

  • Asynchronous Programming Model (APM) pattern (also called the IAsyncResult pattern), where asynchronous operations require Begin and End methods (for example, BeginWrite and EndWrite for asynchronous write operations). This pattern is no longer recommended for new development. For more information, see Asynchronous Programming Model (APM).

  • Event-based Asynchronous Pattern (EAP), which requires a method that has the Async suffix, and also requires one or more events, event handler delegate types, and EventArg-derived types. EAP was introduced in the .NET Framework 2.0. It is no longer recommended for new development. For more information, see Event-based Asynchronous Pattern (EAP).

  • Task-based Asynchronous Pattern (TAP), which uses a single method to represent the initiation and completion of an asynchronous operation. TAP was introduced in the .NET Framework 4 and is the recommended approach to asynchronous programming in the .NET Framework. For more information, see Task-based Asynchronous Pattern (TAP).

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);
}

The APM counterpart of this method 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);
}

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;
}

The TAP counterpart would expose the following single ReadAsync method:

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

For a comprehensive discussion of TAP, APM, and EAP, see the links provided in the next section.

Title

Description

Asynchronous Programming Model (APM)

Describes the legacy model that uses the IAsyncResult interface to provide asynchronous behavior. This model is no longer recommended for new development.

Event-based Asynchronous Pattern (EAP)

Describes the event-based legacy model for providing asynchronous behavior. This model is no longer recommended for new development.

Task-based Asynchronous Pattern (TAP)

Describes the new asynchronous pattern based on the System.Threading.Tasks namespace. This model is the recommended approach to asynchronous programming in the .NET Framework 4 and later versions.

Show:
© 2014 Microsoft