Asenkron programlama desenleri
.NET, zaman uyumsuz işlemler gerçekleştirmek için üç desen sağlar:
Zaman uyumsuz bir işlemin başlatılmasını ve tamamlanmasını göstermek için tek bir yöntem kullanan görev tabanlı Zaman Uyumsuz Desen (TAP). TAP, .NET Framework 4'te tanıtıldı. .NET'te zaman uyumsuz programlama için önerilen yaklaşımdır. C# dilindeki async ve await anahtar sözcükleri ile tap için dil desteği ekleme Visual Basic Async ve Await işleçleri. Daha fazla bilgi için bkz . Görev Tabanlı Zaman Uyumsuz Desen (TAP).
Zaman uyumsuz davranış sağlamaya yönelik olay tabanlı eski model olan Olay Tabanlı Zaman Uyumsuz Desen (EAP). Son ekine ve bir veya daha fazla olaya, olay işleyicisi temsilci türlerine ve
EventArg
türetilmiş türlere sahipAsync
bir yöntem gerektirir. EAP, .NET Framework 2.0'da tanıtıldı. Yeni geliştirme için artık önerilmez. Daha fazla bilgi için bkz . Olay Tabanlı Zaman Uyumsuz Desen (EAP).Zaman uyumsuz davranış sağlamak için arabirimini kullanan IAsyncResult eski model olan Zaman Uyumsuz Programlama Modeli (APM) deseni (desen olarak da adlandırılırIAsyncResult). Bu düzende, zaman uyumlu işlemler için ve yöntemleri gerekir
Begin
(örneğin,BeginWrite
veEndWrite
zaman uyumsuz yazma işlemi uygulamakEnd
için). Bu düzen artık yeni geliştirme için önerilmez. Daha fazla bilgi için bkz. Zaman Uyumsuz Programlama Modeli (APM).
Desenlerin karşılaştırması
Üç desen modelinin zaman uyumsuz işlemleri nasıl hızlı bir şekilde karşılaştırması için, belirtilen miktarda veriyi belirtilen uzaklıkta başlayan bir arabelleğe okuyan bir yöntemi göz önünde bulundurun Read
:
public class MyClass
{
public int Read(byte [] buffer, int offset, int count);
}
Bu yöntemin TAP karşılığı aşağıdaki tek ReadAsync
yöntemi kullanıma sunar:
public class MyClass
{
public Task<int> ReadAsync(byte [] buffer, int offset, int count);
}
EAP karşılığı aşağıdaki tür ve üye kümesini kullanıma sunar:
public class MyClass
{
public void ReadAsync(byte [] buffer, int offset, int count);
public event ReadCompletedEventHandler ReadCompleted;
}
APM'nin karşılığı ve EndRead
yöntemlerini kullanıma sunarBeginRead
:
public class MyClass
{
public IAsyncResult BeginRead(
byte [] buffer, int offset, int count,
AsyncCallback callback, object state);
public int EndRead(IAsyncResult asyncResult);
}