Aracılığıyla paylaş


Zaman uyumsuz 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ı temsil etmek için tek bir yöntem kullanan görev tabanlı Zaman Uyumsuz Desen (TAP). TAP, .NET Framework 4'te kullanıma sunulmuştur. .NET'te zaman uyumsuz programlama için önerilen yaklaşımdır. C# dilinde zaman uyumsuz ve await anahtar sözcükleri ve Visual Basic'teki Async ve Await işleçleri TAP için dil desteği ekler. 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). Async son ekine ve bir veya daha fazla olaya, olay işleyicisi delege türlerine ve EventArg türetilmiş türlere sahip bir yöntem gerektirir. EAP, .NET Framework 2.0'da kullanıma sunulmuştur. Yeni geliştirme için artık önerilmez. Daha fazla bilgi için bkz. Olay Tabanlı Zaman Uyumsuz Desen (EAP).

  • Asenkron Programlama Modeli (APM) deseni (IAsyncResult deseni olarak da adlandırılır), zaman uyumsuz davranış sağlamak için IAsyncResult arabirimini kullanan eski modeldir. Bu düzende, asenkron işlemler için Begin ve End yöntemleri gerekir (örneğin, asenkron yazma işlemi uygulamak için BeginWrite ve EndWrite). 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ı

Üç desenin zaman uyumsuz işlemleri nasıl modellediğini hızlı bir şekilde karşılaştırmak için, belirtilen bir başlangıç noktasında başlayan belirli miktarda veriyi sağlanan arabelleğe okuyan bir yöntemi göz önünde bulundurun:

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

Bu yöntemin TAP karşılığı aşağıdaki tek bir ReadAsync yöntemi kullanıma sunacaktır.

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

EAP'nin karşılığı, aşağıdaki tür ve üyeleri sunar:

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

APM muadili, BeginRead ve EndRead yöntemlerini kullanıma sunar.

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

Ayrıca bakınız