Compartilhar via


Padrões de programação assíncrona

O .NET fornece três padrões para executar operações assíncronas:

  • TAP (Padrão Assíncrono baseado em tarefa), que usa um único método para representar a iniciação e a conclusão de uma operação assíncrona. O TAP foi introduzido no .NET Framework 4. É a abordagem recomendada para programação assíncrona no .NET. As palavras-chave assíncrona e await em C# e os operadores Async e Await no Visual Basic adicionam suporte de linguagem para TAP. Para obter mais informações, consulte TAP (Padrão Assíncrono baseado em tarefa).

  • Padrão Assíncrono baseado em evento (EAP), que é o modelo herdado baseado em evento para fornecer comportamento assíncrono. Ele requer um método que tem o sufixo Async e um ou mais eventos, tipos delegados de manipulador de eventos e tipos derivados de EventArg. O EAP foi introduzido no .NET Framework 2.0. Não é mais recomendável para novos desenvolvimentos. Para obter mais informações, consulte EAP (Padrão Assíncrono) baseado em evento.

  • Padrão de Modelo de Programação Assíncrona (APM) (também chamado de padrão IAsyncResult), que é o modelo herdado que usa a interface IAsyncResult para fornecer comportamento assíncrono. Nesse padrão, as operações assíncronas exigem Begin e End métodos (por exemplo, BeginWrite e EndWrite para implementar uma operação de gravação assíncrona). Esse padrão não é mais recomendado para o novo desenvolvimento. Para obter mais informações, consulte APM (Modelo de Programação Assíncrona).

Comparação de padrões

Para obter uma comparação rápida de como os três padrões modelam operações assíncronas, considere um Read método que lê uma quantidade especificada de dados em um buffer fornecido a partir de um deslocamento especificado:

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

O equivalente TAP desse método exporia o seguinte método único ReadAsync :

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

A contraparte EAP exporia o seguinte conjunto de tipos e membros:

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

O equivalente do APM exporia os métodos BeginRead e EndRead.

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

Consulte também