Asynkrona programmeringsmönster

.NET innehåller tre mönster för att utföra asynkrona åtgärder:

  • Uppgiftsbaserat Asynkront mönster (TAP) som använder en enda metod för att representera initieringen och slutförandet av en asynkron åtgärd. TAP introducerades i .NET Framework 4. Det är den rekommenderade metoden för asynkron programmering i .NET. Nyckelorden async och await i C# och operatorerna Async och Await i Visual Basic lägga till språkstöd för TAP. Mer information finns i Uppgiftsbaserat Asynkront mönster (TAP).

  • Händelsebaserat Asynkront mönster (EAP), som är den händelsebaserade äldre modellen för att tillhandahålla asynkront beteende. Det kräver en metod som har suffixet Async och en eller flera händelser, händelsehanterardelegattyper och EventArg-härledda typer. EAP introducerades i .NET Framework 2.0. Det rekommenderas inte längre för ny utveckling. Mer information finns i Händelsebaserat Asynkront mönster (EAP).

  • APM-mönster (asynkront programmeringsmodell) (kallas IAsyncResult även mönstret), vilket är den äldre modellen som använder IAsyncResult gränssnittet för att tillhandahålla asynkront beteende. I det här mönstret kräver Begin synkrona åtgärder och End metoder (till exempel BeginWrite och EndWrite för att implementera en asynkron skrivåtgärd). Det här mönstret rekommenderas inte längre för ny utveckling. Mer information finns i APM (Asynchronous Programming Model).

Jämförelse av mönster

För en snabb jämförelse av hur de tre mönstren modellerar asynkrona åtgärder bör du överväga en Read metod som läser en angiven mängd data i en angiven buffert med början vid en angiven förskjutning:

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

TAP-motsvarigheten för den här metoden skulle exponera följande enda ReadAsync metod:

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

EAP-motsvarigheten skulle exponera följande typer och medlemmar:

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

APM-motsvarigheten BeginRead skulle exponera metoderna och EndRead :

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

Se även