Aracılığıyla paylaş


Olay Tabanlı Zaman Uyumsuz Desenin Ne Zaman Uygulanacaklarına Karar Verme

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ı desenin yanı sıra IAsyncResult desenini uygulamanız gerekebilir.

Uyarı

Olay tabanlı desen de uygulanmadan IAsyncResult deseninin 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 IAsyncResult desenini kullanıma sunmayın.

  • Deseni IAsyncResult yalnızca gereksinimlerinizi karşılamak için gerekli olduğunda kullanıma sunma. Örneğin, mevcut bir API ile uyumlu olmak için IAsyncResult desenini açığa çıkarmanız gerekebilir.

  • IAsyncResult şablonunu, olay tabanlı şablonu da göstermeden göstermeyin.

  • 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, varsayılan olarak olay tabanlı deseni oluşturun, ayrıca IAsyncResult desenini oluşturma seçeneği sunun.

  • Olay tabanlı desen uygulamanızı IAsyncResult desen uygulamanız üzerine inşa edin.

  • 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, aynı sınıfta olay tabanlı deseni ve IAsyncResult desenini ortaya koyma. Ö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.

    • Eğer bir sınıfta hem olay tabanlı deseni hem de IAsyncResult desenini kullanıma sunmanız gerekiyorsa, EditorBrowsableAttribute deseni uygulamasını gelişmiş bir özellik olarak işaretlemek için AdvancedIAsyncResult ayarlayın. Bu, IAsyncResult özellikleri ve yöntemleri görüntülememek için Visual Studio IntelliSense gibi ortamları tasarlamamayı belirtir. 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 IAsyncResult nesneleri daha fazla oluşturduğu ve iş parçacıkları arasında eşitlenme yaptığından, EventArgs deseninden daha az verimlidir.

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

  • IAsyncResult desenini yalnızca özel olarak WaitHandle veya IAsyncResult nesneleri için desteğe ihtiyaç duyduğunuzda kullanıma sunun.

  • Yalnızca mevcut API'niz IAsyncResult desenini kullanıyorsa IAsyncResult desenini kullanıma sunun.

  • 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.

  • Yüksek performans gereksinimlerinizin olduğunu ve bunların doğrulandığını, fakat olay tabanlı desenle karşılanamadığını, ancak IAsyncResult deseni ile karşılanabileceğini doğruladıysanız, yalnızca bu durumda IAsyncResult desenini kullanıma sunun.

Ayrıca bakınız