Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
.NET offre tre modelli per l'esecuzione di operazioni asincrone:
Modello asincrono basato su attività (TAP), che usa un singolo metodo per rappresentare l'avvio e il completamento di un'operazione asincrona. TAP è stato introdotto in .NET Framework 4. Si tratta dell'approccio consigliato per la programmazione asincrona in .NET. Le parole chiave async e await in C# e gli operatori Async e Await in Visual Basic aggiungono il supporto del linguaggio per TAP. Per altre informazioni, vedere Modello asincrono basato su attività (TAP).
Modello asincrono basato su eventi (EAP), ovvero il modello legacy basato su eventi per fornire un comportamento asincrono. Richiede un metodo con il
Async
suffisso e uno o più eventi, tipi di delegate dei gestori eventi e tipi derivati daEventArg
. EAP è stato introdotto in .NET Framework 2.0. Non è più consigliato per il nuovo sviluppo. Per altre informazioni, vedere Modello asincrono basato su eventi (EAP).Modello di programmazione asincrona ( chiamato IAsyncResult anche modello), ovvero il modello legacy che usa l'interfaccia IAsyncResult per fornire un comportamento asincrono. In questo modello, le operazioni asincrone richiedono
Begin
metodi eEnd
(ad esempio,BeginWrite
eEndWrite
per implementare un'operazione di scrittura asincrona). Questo modello non è più consigliato per il nuovo sviluppo. Per altre informazioni, vedere Modello di programmazione asincrona .
Confronto tra modelli
Per un rapido confronto del modo in cui i tre modelli modellano le operazioni asincrone, prendere in considerazione un Read
metodo che legge una quantità specificata di dati in un buffer specificato a partire da un offset specificato:
public class MyClass
{
public int Read(byte [] buffer, int offset, int count);
}
La controparte TAP di questo metodo espone il metodo singolo ReadAsync
seguente:
public class MyClass
{
public Task<int> ReadAsync(byte [] buffer, int offset, int count);
}
La controparte EAP esporrebbe il seguente insieme di tipi e membri:
public class MyClass
{
public void ReadAsync(byte [] buffer, int offset, int count);
public event ReadCompletedEventHandler ReadCompleted;
}
La controparte di APM esporrebbe i metodi BeginRead
e EndRead
.
public class MyClass
{
public IAsyncResult BeginRead(
byte [] buffer, int offset, int count,
AsyncCallback callback, object state);
public int EndRead(IAsyncResult asyncResult);
}