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í aEventArg
odvozené 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
aEnd
metody (napříkladBeginWrite
aEndWrite
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);
}