Share via


Olay Tabanlı Zaman Uyumsuz Desenin Ne Zaman Uygulanacağını Belirleme

Olay Tabanlı Zaman Uyumsuz Desen, bir sınıfın zaman uyumsuz davranışını ortaya çıkarmak için bir desen sağlar. Bu desenin kullanıma sunulmasıyla .NET, zaman uyumsuz davranışı ortaya çıkarmak için iki desen tanımlar: arabirime dayalı System.IAsyncResult Zaman Uyumsuz Desen ve olay tabanlı desen. Bu makalede, her iki deseni de ne zaman uygulayabileceğiniz açıklanır.

Arabirimiyle IAsyncResult zaman uyumsuz programlama hakkında daha fazla bilgi için bkz. Zaman Uyumsuz Programlama Modeli (APM).

Genel İlkeler

Genel olarak, mümkün olduğunda Olay Tabanlı Zaman Uyumsuz Deseni kullanarak zaman uyumsuz özellikleri kullanıma sunmanız gerekir. Ancak, olay tabanlı düzenin karşılayamayacağı bazı gereksinimler vardır. Bu gibi durumlarda, olay tabanlı desene ek olarak deseni uygulamanız IAsyncResult gerekebilir.

Not

Desenin IAsyncResult olay tabanlı desen de uygulanmadan uygulanması nadirdir.

Yönergeler

Aşağıdaki listede, Olay Tabanlı Zaman Uyumsuz Deseni ne zaman uygulamanız gerektiğiyle ilgili yönergeler açıklanmaktadır:

  • Sınıfınız için zaman uyumsuz davranışı ortaya çıkarmak için olay tabanlı deseni varsayılan API olarak kullanın.

  • Sınıfınız öncelikli olarak windows forms gibi bir istemci uygulamasında kullanıldığında deseni kullanıma sunma IAsyncResult .

  • Deseni IAsyncResult yalnızca gereksinimlerinizi karşılamak için gerekli olduğunda kullanıma sunma. Örneğin, mevcut bir API ile uyumluluk için deseni IAsyncResult kullanıma sunmanız gerekebilir.

  • Olay tabanlı deseni IAsyncResult de göstermeden deseni kullanıma sunma.

  • Deseni IAsyncResult kullanıma sunmanız gerekiyorsa, bunu gelişmiş bir seçenek olarak yapın. Örneğin, bir ara sunucu nesnesi oluşturursanız, deseni oluşturma seçeneğiyle olay tabanlı deseni IAsyncResult varsayılan olarak oluşturun.

  • Olay tabanlı desen uygulamanızı desen uygulamanızda IAsyncResult oluşturun.

  • Aynı sınıfta hem olay tabanlı deseni hem de deseni IAsyncResult ortaya çıkarmaktan kaçının. "Daha yüksek düzey" sınıflarında olay tabanlı deseni IAsyncResult ve "alt düzey" sınıflardaki deseni kullanıma sunma. Örneğin, bileşendeki olay tabanlı deseni WebClient sınıftaki IAsyncResult desenle karşılaştırın HttpRequest .

    • Uyumluluk gerektirdiğinde olay tabanlı deseni IAsyncResult ve deseni aynı sınıfta kullanıma sunma. Örneğin, deseni kullanan bir API'yi IAsyncResult zaten yayımladıysanız geriye dönük uyumluluk için deseni IAsyncResult korumanız gerekir.

    • Sonuçta elde edilen nesne modeli karmaşıklığı, uygulamaları ayırmanın avantajından daha fazlaysa olay tabanlı deseni ve IAsyncResult deseni aynı sınıfta kullanıma sunma. Olay tabanlı deseni ortaya çıkarmaktan kaçınmak yerine her iki deseni de tek bir sınıfta kullanıma açmak daha iyidir.

    • Tek bir sınıfta hem olay tabanlı deseni hem IAsyncResult de deseni kullanıma sunmanız gerekiyorsa, desen uygulamasını gelişmiş bir özellik olarak işaretlemek IAsyncResult için Advanced set komutunu kullanınEditorBrowsableAttribute. Bu, özellikleri ve yöntemleri görüntülememek için Visual Studio IntelliSense gibi ortamları tasarlamayı IAsyncResult gösterir. Bu özellikler ve yöntemler hala tamamen kullanılabilir, ancak IntelliSense aracılığıyla çalışan geliştirici API'nin daha net bir görünümüne sahiptir.

Olay Tabanlı Desene Ek Olarak IAsyncResult Desenini Ortaya Çıkarma Ölçütleri

Olay Tabanlı Zaman Uyumsuz Desen daha önce bahsedilen senaryolar altında birçok avantaja sahip olsa da, en önemli gereksiniminiz performanssa farkında olmanız gereken bazı dezavantajları vardır.

Olay tabanlı desenin ve IAsyncResult desenin ele almadığı üç senaryo vardır:

Olay tabanlı deseni kullanarak bu senaryoları ele alabilirsiniz, ancak bunu yapmak deseni kullanmaktan IAsyncResult daha hantaldır.

Geliştiriciler genellikle çok yüksek performans gereksinimleri olan hizmetler için deseni kullanır IAsyncResult . Örneğin, tamamlama senaryosu için yoklama yüksek performanslı bir sunucu tekniğidir.

Ayrıca olay tabanlı desen, özellikle EventArgsde daha fazla nesne oluşturduğundan ve iş parçacıkları arasında eşitlendiğinden desenden daha IAsyncResult az verimlidir.

Aşağıdaki listede, deseni kullanmaya IAsyncResult karar verirseniz izleyebileceğiniz bazı öneriler gösterilir:

  • Deseni IAsyncResult yalnızca veya IAsyncResult nesneleri için WaitHandle özel olarak desteğe ihtiyaç duyarsanız kullanıma sunar.

  • Deseni yalnızca deseni IAsyncResult kullanan IAsyncResult mevcut bir API'niz olduğunda kullanıma sunma.

  • Deseni temel alan IAsyncResult bir API'niz varsa, bir sonraki sürümde olay tabanlı deseni de kullanıma sunmayı göz önünde bulundurun.

  • Yalnızca doğruladığınız yüksek performans gereksinimleriniz varsa, deseni kullanıma sunma IAsyncResult olay tabanlı desen tarafından karşılanamaz ancak desen tarafından IAsyncResult karşılanabilir.

Ayrıca bkz.