Comparteix a través de


Patrones para la programación asincrónica

.NET proporciona tres patrones para realizar las operaciones asincrónicas:

  • 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. TAP Se presentó en .NET Framework 4. Es el enfoque recomendado para la programación asincrónica en. 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. Para más información, consulte Patrón asincrónico basado en tareas (TAP).

  • El modelo asincrónico basado en eventos (EAP) , que es el patrón heredado basado en eventos para proporcionar el comportamiento asincrónico. 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. EAP se presentó en .NET Framework 2.0. Ya no se recomienda para nuevo desarrollo. Para más información, consulte Modelo asincrónico basado en eventos (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. 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). Este patrón ya no se recomienda para nuevo desarrollo. Para más información, consulte Modelo de programación asincrónica (APM).

Comparación de patrones

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:

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:

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:

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:

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

Vea también