Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O .NET fornece três padrões para executar operações assíncronas:
Padrão assíncrono baseado em tarefas (TAP), que usa um único método para representar o início e a conclusão de uma operação assíncrona. A TAP foi introduzida no .NET Framework 4. É a abordagem recomendada para programação assíncrona no .NET. As palavras-chave async e await em C# e os operadores Async e Await no Visual Basic adicionam suporte à linguagem TAP. Para obter mais informações, consulte Padrão assíncrono baseado em tarefas (TAP).
EAP (Padrão Assíncrono Baseado em Evento), que é o modelo herdado baseado em eventos para fornecer comportamento assíncrono. Ele requer um método que tenha o sufixo
Async
e um ou mais eventos, tipos delegados do manipulador de eventos eEventArg
tipos derivados. O EAP foi introduzido no .NET Framework 2.0. Não é mais recomendado para novos desenvolvimentos. Para obter mais informações, consulte Padrão assíncrono baseado em evento (EAP).Padrão de Programação Assíncrona (APM) (também chamado de IAsyncResult padrão), que é o modelo antigo que usa a interface IAsyncResult para fornecer comportamento assíncrono. Nesse padrão, as operações assíncronas exigem
Begin
eEnd
métodos (por exemplo,BeginWrite
eEndWrite
para implementar uma operação de gravação assíncrona). Esse padrão não é mais recomendado para novos desenvolvimentos. Para obter mais informações, consulte Modelo de programação assíncrona (APM).
Comparação de padrões
Para 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);
}
A contraparte TAP deste método exporia o seguinte método único ReadAsync
:
public class MyClass
{
public Task<int> ReadAsync(byte [] buffer, int offset, int count);
}
A contrapartida do PAA exporia o seguinte conjunto de tipos e membros:
public class MyClass
{
public void ReadAsync(byte [] buffer, int offset, int count);
public event ReadCompletedEventHandler ReadCompleted;
}
A contraparte 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);
}