Aszinkron programozási minták

A .NET három mintát biztosít az aszinkron műveletek végrehajtásához:

  • Feladatalapú aszinkron minta (TAP), amely egyetlen metódust használ egy aszinkron művelet elindításának és befejezésének ábrázolására. A TAP a .NET-keretrendszer 4-ben jelent meg. Ez az aszinkron programozás ajánlott megközelítése a .NET-ben. A C# aszinkron és várakozási kulcsszavai, valamint az Async és await operátorok Visual Basic nyelvi támogatást nyújtanak a TAP-hoz. További információ: Feladatalapú aszinkron minta (TAP).

  • Eseményalapú aszinkron minta (EAP), amely az aszinkron viselkedést biztosító eseményalapú örökölt modell. Olyan metódust igényel, amely utótagot Async és egy vagy több eseményt, eseménykezelő delegálási típust és EventArg-származtatott típust használ. Az EAP a .NET-keretrendszer 2.0-s verzióban jelent meg. Az új fejlesztéshez már nem ajánlott. További információ: Eseményalapú aszinkron minta (EAP).

  • Aszinkron programozási modell (APM) minta (más néven IAsyncResult minta), amely az aszinkron viselkedést az interfészt használó IAsyncResult örökölt modell. Ebben a mintában a szinkron műveletekhez és End metódusokhoz (például EndWriteBeginWrite egy aszinkron írási művelet implementálásához) van szükségBegin. Ez a minta már nem ajánlott az új fejlesztéshez. További információ: Aszinkron programozási modell (APM).

Minták összehasonlítása

A három minta aszinkron műveleteinek gyors összehasonlításához fontolja meg azt Read a módszert, amely egy megadott mennyiségű adatot olvas be egy megadott pufferbe egy megadott eltolástól kezdve:

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

A metódus TAP megfelelője a következő egyetlen ReadAsync metódust teszi elérhetővé:

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

Az EAP-megfelelő a következő típusokat és tagokat teszi elérhetővé:

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

Az APM-megfelelő a következő módszereket és EndRead módszereket teszi közzéBeginRead:

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

Lásd még