Patrones para la programación asincrónicaAsynchronous programming patterns

.NET proporciona tres patrones para realizar las operaciones asincrónicas:.NET provides three patterns for performing asynchronous operations:

  • Patrón asincrónico basado en tareas (TAP), que utiliza un método único para representar el inicio y la finalización de una operación asincrónica.Task-based Asynchronous Pattern (TAP), which uses a single method to represent the initiation and completion of an asynchronous operation. TAP apareció por primera vez en .NET Framework 4.TAP was introduced in the .NET Framework 4. Es el enfoque recomendado para la programación asincrónica en. NET.It's the recommended approach to asynchronous programming in .NET. Las palabras clave 2.async y await en C# y los operadores Async y Await en Visual Basic agregan compatibilidad de lenguaje para TAP.The async and await keywords in C# and the Async and Await operators in Visual Basic add language support for TAP. Para más información, consulte Patrón asincrónico basado en tareas (TAP).For more information, see Task-based Asynchronous Pattern (TAP).

  • El modelo asincrónico basado en eventos (EAP), que es el patrón heredado basado en eventos para proporcionar el comportamiento asincrónico.Event-based Asynchronous Pattern (EAP), which is the event-based legacy model for providing asynchronous behavior. Requiere un método con el sufijo Async, así como uno o más eventos, tipos de delegado de controlador de eventos y tipos derivados de EventArg.It requires a method that has the Async suffix and one or more events, event handler delegate types, and EventArg-derived types. EAP apareció por primera vez en .NET Framework 2.0.EAP was introduced in the .NET Framework 2.0. Ya no se recomienda para nuevo desarrollo.It's no longer recommended for new development. Para más información, consulte Modelo asincrónico basado en eventos (EAP).For more information, see Event-based Asynchronous Pattern (EAP).

  • El patrón Modelo de programación asincrónica (APM) (también denominado IAsyncResult), que es el modelo heredado que usa la interfaz IAsyncResult para ofrecer un comportamiento asincrónico.Asynchronous Programming Model (APM) pattern (also called the IAsyncResult pattern), which is the legacy model that uses the IAsyncResult interface to provide asynchronous behavior. En este patrón, las operaciones sincrónicas requieren los métodos Begin y End (por ejemplo, BeginWrite y EndWrite para implementar una operación de escritura asincrónica).In this pattern, synchronous operations require Begin and End methods (for example, BeginWrite and EndWrite to implement an asynchronous write operation). Este patrón ya no se recomienda para nuevo desarrollo.This pattern is no longer recommended for new development. Para más información, consulte Modelo de programación asincrónica (APM).For more information, see Asynchronous Programming Model (APM).

Comparación de patronesComparison of patterns

Para una comparación rápida de cómo los tres patrones modelan las operaciones asincrónicas, considere un método Read que lea una determinada cantidad de datos en un búfer proporcionado comenzando en un desplazamiento especificado: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);  
}  

El equivalente TAP de este método expondría el siguiente método ReadAsync único: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);  
}  

El equivalente EAP expondría el siguiente conjunto de tipos y miembros: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;  
}  

El equivalente APM expondría los métodos BeginRead y 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);  
}  

Vea tambiénSee also