Vzorce asynchronního programováníAsynchronous programming patterns

.NET nabízí tři vzory pro provádění asynchronních operací:.NET provides three patterns for performing asynchronous operations:

  • Asynchronní vzor založený na úlohách (klepněte) , který používá jedinou metodu představující zahájení a dokončení asynchronní operace.Task-based Asynchronous Pattern (TAP), which uses a single method to represent the initiation and completion of an asynchronous operation. Klepněte na zavedený .NET Framework 4.TAP was introduced in the .NET Framework 4. Je to doporučený přístup k asynchronnímu programování v rozhraní .NET.It's the recommended approach to asynchronous programming in .NET. Klíčová slova Async a await C# v a operátory Async a await v Visual Basic přidat jazykovou podporu pro klepněte.The async and await keywords in C# and the Async and Await operators in Visual Basic add language support for TAP. Další informace najdete v tématu asynchronní vzor založený na úlohách (klepněte).For more information, see Task-based Asynchronous Pattern (TAP).

  • Asynchronní vzor založený na událostech (EAP) , což je starší model založený na událostech pro zajištění asynchronního chování.Event-based Asynchronous Pattern (EAP), which is the event-based legacy model for providing asynchronous behavior. Vyžaduje metodu, která má příponu Async a jednu nebo více událostí, typy delegátů obslužné rutiny události a typy odvozené od EventArg.It requires a method that has the Async suffix and one or more events, event handler delegate types, and EventArg-derived types. Protokol EAP byl představený v .NET Framework 2,0.EAP was introduced in the .NET Framework 2.0. Už se nedoporučuje pro nový vývoj.It's no longer recommended for new development. Další informace najdete v tématu asynchronní vzor založený na událostech (EAP).For more information, see Event-based Asynchronous Pattern (EAP).

  • Model asynchronního programování (APM) (označuje se také jako vzor IAsyncResult), což je starší model, který používá rozhraní IAsyncResult k zajištění asynchronního chování.Asynchronous Programming Model (APM) pattern (also called the IAsyncResult pattern), which is the legacy model that uses the IAsyncResult interface to provide asynchronous behavior. V tomto vzoru vyžadují synchronní operace Begin a End metody (například BeginWrite a EndWrite k implementaci operace asynchronního zápisu).In this pattern, synchronous operations require Begin and End methods (for example, BeginWrite and EndWrite to implement an asynchronous write operation). Tento model se už nedoporučuje pro nový vývoj.This pattern is no longer recommended for new development. Další informace najdete v tématu asynchronní programovací model (APM).For more information, see Asynchronous Programming Model (APM).

Porovnání vzorůComparison of patterns

Chcete-li rychle porovnat, jak tři vzory modelují asynchronní operace, vezměte v úvahu Read metodu, která načte zadané množství dat do zadané vyrovnávací paměti počínaje zadaným posunem:For a quick comparison of how the three patterns model asynchronous operations, consider a Read method that reads a specified amount of data into a provided buffer starting at a specified offset:

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

Klepnutím na protějšek této metody by se zveřejnila tato jediná ReadAsync metoda:The TAP counterpart of this method would expose the following single ReadAsync method:

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

Protějšek protokolu EAP vystaví následující sadu typů a členů:The EAP counterpart would expose the following set of types and members:

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

Protějšek APM by vystavoval BeginRead a EndRead metody:The APM counterpart would expose the BeginRead and EndRead methods:

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

Viz také:See also