Megosztás a következőn keresztül:


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 módszerrel jelöli az aszinkron művelet indítását és befejezését. A TAP a .NET-keretrendszer 4-ben lett bevezetve. Ez az aszinkron programozás ajánlott megközelítése a .NET-ben. Az aszinkron és várakozási kulcsszavak a C#-ban, valamint az Async és a Await operátorok a Visual Basicben nyelvi támogatást nyújtanak a TAP-hoz. További információ: Feladatalapú aszinkron minta (TAP).

  • Eseményalapú aszinkron minta (EAP), amely az eseményalapú örökölt modell az aszinkron viselkedés biztosításához. Olyan metódust igényel, amelynek utótagja Async és egy vagy több eseménye, eseménykezelő delegált típusa és EventArg-származtatott típusa van. Az EAP a .NET Framework 2.0-ban lett bevezetve. Ez már nem ajánlott az új fejlesztéshez. 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 biztosító interfészt használó IAsyncResult örökölt modell. Ebben a mintában az aszinkron műveletekhez Begin és End metódusok szükségesek (például BeginWrite és EndWrite az aszinkron írási művelet megvalósításához). 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 meghatározott 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 módszer 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ője a következő típusok és tagok készletét teszi elérhetővé.

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

Az APM megfelelője feltárná a BeginRead és EndRead módszereket.

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