Compartir a través de


Patrones de programación asincrónica

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

  • Patrón asincrónico basado en tareas (TAP), que usa un único método para representar el inicio y la finalización de una operación asincrónica. TAP se introdujo en .NET Framework 4. Es el enfoque recomendado para la programación asincrónica en .NET. Las palabras clave async y await en C# y los operadores Async y Await en Visual Basic agregan compatibilidad de lenguaje para TAP. Para obtener más información, vea Patrón asincrónico basado en tareas (TAP).

  • Patrón asincrónico basado en eventos (EAP), que es el modelo heredado basado en eventos para proporcionar un comportamiento asincrónico. Requiere un método que tenga el sufijo Async y uno o varios eventos, tipos de delegados del controlador de eventos y tipos derivados de EventArg. EAP se introdujo en .NET Framework 2.0. Ya no está recomendado para nuevos proyectos. Para obtener más información, consulte Patrón asincrónico basado en eventos (EAP).

  • Modelo de programación asincrónica (APM) (también denominado IAsyncResult patrón), que es el modelo heredado que usa la IAsyncResult interfaz para proporcionar un comportamiento asincrónico. En este patrón, las operaciones asincrónicas requieren Begin y End métodos (por ejemplo, BeginWrite e EndWrite implementar una operación de escritura asincrónica). Este patrón ya no se recomienda para el nuevo desarrollo. Para obtener más información, vea Modelo de programación asincrónica (APM).

Comparación de patrones

** Para obtener una comparación rápida de cómo los tres patrones modelan las operaciones asincrónicas, considere un método Read que lee una cantidad de datos especificada en un búfer proporcionado, comenzando a partir de un desplazamiento especificado.

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

El homólogo TAP de este método expondría el siguiente método único ReadAsync :

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

El homólogo de 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 homólogo de 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);  
}  

Consulte también