Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 ésEventArg-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ésEndmetódusok szükségesek (példáulBeginWriteésEndWriteaz 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);
}