Çok sayıda Görev örneği oluşturdum. Hepsini çalıştırmam ve hepsinin tamamlanmasını beklemem gerek. Sorun şu ki, herhangi bir zamanda “başlatılmış” ve “tamamlandı” arasında en fazla X görevinin olmadığından emin olmam gerekiyor; Görevler, eşzamanlı çağrıların sayısı üzerinde kısıtlama olan diğer taraflara yapılan çağrıları içerir. Bu kısıtlamalar benim donanımıma dayanmadığından, yerleşik bir akıllı daralmaya dayanamıyorum; Limiti kesinlikle uygulamak zorundayım. Görevlerin paylaşılan bir değişkeni iş parçacığı güvenli bir şekilde artırıp azaltarak yapabildim, ancak gereksiz bir şekilde gereksiz görünüyor. Doğrudan API’ya daha yerleşik olan bir yol mu yoksa eksik bir kolay senkronizasyon aracı mı?Birçok .NET Görev örneğini atmanın en iyi yolu nedir?
cevap
Sen How to: Create a Task Scheduler That Limits the Degree of Concurrency
Düzenleme bakın kendi görev zamanlayıcı oluşturmak zorunda: Bu Semaphore ile daha fazla kod gerektirir ancak iş parçacığı havuzu hangi görevler yürütülür, çünkü bu daha iyi performans gibi bir his var senin semaforun farkında değil, ama TaskScheduler kullanarak kendi kurallarına göre oynuyor.
Düzenleme 2: semafor kullanmanın mümkün dezavantajı biri, iş parçacığı havuzu görev IO işlemlerini yaptığını düşünmek ve (bir defada onları çok planlama yapabileceği onlar orada asmak ve onlar 'don nedeniyle, bekleyin böylece CPU'ya ihtiyaç var). TaskScheduler kullanarak onlar için yer olduğunda tam olarak programlanacaktır. Havuz temizleyiciyi kesinlikle tutacaktır.
Semaphore sınıfı sizin için işe yarayabilecek: http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx
nasıl kullanılacağını göstermek için bu MSDN sayfasındaki iyi bir örnek vardır.
Ayrıca, aynı ucu gerçekleştirmek için kullanabileceğiniz daha hafif yerleşik iç içe geçirme havuzu/senkronizasyon mekanizmaları da olabilir, ancak Semafor temel olarak sizin istediğiniz şeyi yapmak için tasarlanmıştır.
.net 4.0 ve Semaphore hakkında konuşursam SemaphoreSlim'e bakmanızı öneririm: http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx – Andrey
- 1. Birçok youtube videosunu yüklemenin en iyi yolu nedir?
- 2. Jmeter'da en iyi yolu bulmanın en iyi yolu nedir?
- 3. jSON'un WCF'de bir .NET DataTable serileştirmesinin en iyi yolu nedir?
- 4. ArrayList'ten List'e listelenmesinin en iyi yolu nedir? Net 2.0
- 5. Dosyayı sunucudan indirmenin en iyi yolu nedir
- 6. Denemekten kaçınmanın en iyi yolu nedir?
- 7. Ember.js'de olayları işlemenin en iyi yolu nedir?
- 8. Tek bir değişkeni birçok yanıtla çizmenin en iyi yolu
- 9. DateTime'ı çerezlere depolamanın en iyi yolu nedir?
- 10. BackGroundWorker'ı Atmanın Uygun Yolu
- 11. core.clj'yi kurmanın en iyi yolu nedir?
- 12. Perl'de ekranı temizlemenin en iyi yolu nedir?
- 13. Bir animasyonu sürmenin en iyi yolu nedir?
- 14. Kitaplığı zenginleştirmeyi en iyi yolu scala'da nedir?
- 15. Javascript yürütme işleminin en iyi yolu nedir?
- 16. php'de uluslararasılaşmanın en iyi yolu nedir?
- 17. Nesneleri kapsayıcılarda paylaşmanın en iyi yolu nedir?
- 18. Süreyi saklamanın en iyi yolu nedir? MySQL
- 19. Gözlemlenebilir klonlamanın en iyi yolu nedir?
- 20. Kullanıcı bildirimlerini saklamanın en iyi yolu nedir?
- 21. ClickOnce dağıtımlarının oluşturulmasının en iyi yolu nedir
- 22. Basit sayılar tanımanın en iyi yolu nedir?
- 23. İç ürünleri oluşturmanın en iyi yolu nedir?
- 24. Python'da HTML işlemenin en iyi yolu nedir?
- 25. Sunucumun API'sini ortaya çıkarmanın en iyi yolu nedir?
- 26. en iyi yolu
- 27. . Net? RESTful hizmeti "istemci" yazmanın en iyi yolu.
- 28. Kimlik doğrulamasını işlemenin en iyi yolu .NET WCF Web API'sı
- 29. aws'da bir django projesi çalıştırmanın en iyi yolu nedir?
- 30. en iyi yolu Bu benim kodudur
Bir Semaphore bana iyi bir çözüm gibi geliyor. –