2013-03-02 16 views
6

Ben Quartz.net kullanır biz in-house kullandığınız bir iş zamanlama sistemini yükseltmek için çalışıyorum. Quartz'ın en son sürümünün kaynağına baktığımda, .NET 4.0 ile gönderilmeye başlayan çok geliştirilmiş iş parçacığı havuzu (veya System.Threading.Tasks öğesinden başka bir şey) yerine kendi iş parçacığı havuzu uygulamasını kullanmaya devam ettiğini fark ettim.Quartz.net + Görev Paralel Kütüphanesi

Kimseye başarıyla parçacığı havuzu için kendi zamanlama özellikleri ve VUK için Quartz.net kullanan bir iş zamanlama sistemi hayata geçirdi olmadığını merak olurdu. Quartz'ın iplik havuzunu TPL için değiştirmek nispeten kolay mı? Kuvars, Görevler dünyasında hala geçerli midir? Alternatif olarak, .NET 4.x iş parçacığı havuzu (çekirdek farkındalığı, yerel sıralar, gelişmiş kilitleme, vb.) Ile büyük geliştirmelerde satıldığı gibi, tipik kaba taneli arka plan işleri için yeterince iyi değil ve yeterince değer kuvars'ın iş parçacığı havuzu TPL'yi karışıma zorlama çabası? Birlikte (kullanarak veya değil) bu iki araçlarını kullanarak herhangi bir anlayışlar için şimdiden

teşekkürler.

cevap

3

Quartz.NET VUK biraz daha farklı bir problemi çözmek için vardır. Quartz.NET, yürütme zamanlaması için zengin yetenekler kümesine sahip yinelenen iş zamanlaması için tasarlanmıştır. Diğer taraftan TPL, hesaplamalı iş yükünün yüksek performanslı paralel yürütülmesi anlamına gelir.

Özünde (genellikle) Quartz.NET'i hassas programlama ve TPL'yi tüm bilgi işlem kaynaklarını (çekirdekler vb.) Kullanarak olabildiğince hızlı tamamlanması gereken karmaşık iş yükleri için kullanın.

Bunu söyledikten, ben Quartz.NET kullandığı parçacığı havuzu uygulama işi için oldukça yeterli olduğunu söyleyebilirim. Ayrıca Quartz.NET'in .NET 3.5 uyumlu olduğunu ve yalnızca 4.0 özelliklerini kullanamayacağını unutmayın. Tabii

, ayrıca her zaman çözümde iki birleştirebilirsiniz.

+0

Teşekkürler. Önsezimi onayladınız, belki de arka arkaya çalışmayı yavaş bir şekilde sürdürmek için süper turbo şarjlı bir iplik havuzuna ihtiyacınız yoktur. –

+0

İkisini birlikte kullanarak herhangi bir potansiyel tuzak var mı? Bir örnek vermek gerekirse, tetiklendiğinde, işini veritabanından alan bir iş planlamak istiyorum ve bu iş Parallel.ForEach'te yapmak istediğim 50-100 bireysel iş parçası olabilir. Bunun havaya uçacağı durumlar var mı? – avesse

+1

Birlikte çalışmalılar. Sadece normal kayıt ve istisna işleme rutinlerinizi yerine getirin. Program.cs'ın Main'su atınca sanki aynı şey gibi düşün. Yeniden deneme bayrağı ayarını hataya göre ayarlamayı veya yalnızca bir sonraki yürütmeyi beklemeyi düşünebilirsiniz. Bu, işinizi idempotent yapmak için iyi bir fikirdir. –