Vzory asynchronního programování

.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 zaveden v .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 Visual Basic přidat podporu jazyka 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í, typy delegátů obslužné rutiny událostí a EventArgodvozené typy. EAP byl zaveden v .NET Framework 2.0. Pro nový vývoj se už nedoporučuje. 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), což je starší model, který rozhraní používá k poskytování asynchronního IAsyncResult chování. V tomto vzoru synchronní 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 najdete v tématu Asynchronní programovací model (APM).

Porovnání vzorů

Pro rychlé porovnání způsobu asynchronních operací modelu se třemi vzory zvažte Read metodu, která čte zadanou velikost 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šek TAP této metody by zpřístupnil následující jednu ReadAsync metodu:

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

Protějšek protokolu EAP zveřejní 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 BeginRead metody a EndRead metody:

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

Viz také