Sdílet prostřednictvím


Asynchronní programovací vzory

.NET poskytuje tři vzory pro provádění asynchronních operací:

  • Asynchronní vzor založený na úlohách (TAP), který používá jednu metodu k reprezentaci inicializace a dokončení asynchronní operace. Tap byl představen v rozhraní .NET Framework 4. Jedná se o doporučený přístup k asynchronnímu programování v .NET. Klíčová slova async a await v jazyce C# a operátory Async a Await v jazyce Visual Basic přidávají podporu jazyků pro TAP. Další informace najdete v tématu Asynchronní vzor založený na úlohách (TAP).

  • Asynchronní vzor založený na událostech (EAP), což je starší model založený na událostech pro poskytování asynchronního chování. Vyžaduje metodu, která má příponu Async a jednu nebo více událostí, typ delegáta pro obsluhu událostí a EventArg-odvozené typy. Protokol EAP byl zaveden v rozhraní .NET Framework 2.0. Už se nedoporučuje pro nový vývoj. Další informace najdete v tématu Asynchronní vzor založený na událostech (EAP).

  • Model asynchronního programování (APM) ( označovaný IAsyncResult také jako model), který je zastaralý model využívající rozhraní ke poskytování asynchronního IAsyncResult chování. V tomto vzoru asynchronní operace vyžadují Begin a End metody (například BeginWrite a EndWrite implementují asynchronní operaci zápisu). Tento model se už nedoporučuje pro nový vývoj. Další informace naleznete v tématu Asynchronní programovací model (APM).

Porovnání vzorů

Pokud chcete rychle porovnat, jak tři vzory modelují asynchronní operace, zvažte Read metodu, která čte zadané množství dat do poskytnuté vyrovnávací paměti počínaje zadaným posunem:

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

Protějšk TAP této metody by zpřístupnil následující jedinou ReadAsync metodu:

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

Protějšk EAP by zpřístupnil následující sadu typů a členů:

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

Protějšek APM by zpřístupnil metody BeginRead a EndRead.

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

Viz také