2013-03-02 13 views
6

Pracuję nad uaktualnieniem systemu planowania zadań, którego używamy w domu, który korzysta z Quartz.net. Patrząc na źródło najnowszej wersji Quartz, zauważyłem, że nadal używa on własnej implementacji puli wątków, w przeciwieństwie do znacznie ulepszonej puli wątków (lub czegokolwiek z System.Threading.Tasks), która zaczęła być dostarczana z .NET 4.0.Quartz.net + zadanie Biblioteka równoległa

Chciałbym wiedzieć, czy ktokolwiek pomyślnie wdrożył system planowania zadań, który używa Quartz.net do jego funkcji planowania i TPL do łączenia wątków. Czy stosunkowo łatwo jest wymieniać pulę wątków Quartz na pulę licencji TPL? Czy Quartz jest nadal przydatny w świecie zadań? Alternatywnie, tak jak jestem w świetnych ulepszeniach z pulą wątków .NET 4.x (świadomość rdzeniowa, lokalne kolejki, ulepszone blokowanie itp.), Pula wątków Quartz jest wystarczająco dobra dla typowych gruboziarnistych zadań tła i nie jest warta wysiłek zmuszenia TPL do miksu?

Z góry dziękujemy za wszelkie uwagi dotyczące używania (lub nie używania) tych dwóch narzędzi.

Odpowiedz

3

Quartz.NET ma rozwiązać nieco inny problem niż TPL. Quartz.NET jest przeznaczony do cyklicznego planowania zadań z bogatym zestawem funkcji do wykonania czasu realizacji. Z drugiej strony, licencja TPL jest przeznaczona do wysoce wydajnego równoległego wykonywania obciążeń obliczeniowych.

Zasadniczo korzystasz (zazwyczaj) z Quartz.NET do precyzyjnego planowania i TPL dla średnich obciążeń, które należy wykonać tak szybko, jak to możliwe, wykorzystując wszystkie zasoby komputerowe (rdzenie itp.).

Powiedziawszy to, powiedziałbym, że implementacja puli wątków, z której korzysta Quartz.NET, jest wystarczająca do tego zadania. Pamiętaj również, że Quartz.NET jest zgodny z .NET 3.5 i nie może korzystać z funkcji tylko 4.0.

Oczywiście można również zawsze połączyć oba rozwiązania.

+0

Dzięki. Sądzę, że potwierdziłeś moje przeczucie, że być może nie potrzebujesz puli wątków superładowanych turbo do uruchamiania wolnych zadań nienadzorowanych w tle. –

+0

Czy są potencjalne pułapki przy użyciu tych dwóch kombinacji? Aby podać przykład, chcę zaplanować pracę, która po uruchomieniu pobiera jej pracę z bazy danych, a ta praca może składać się z 50-100 pojedynczych elementów pracy, które chcę wykonać w Parallel.ForEach. Czy są warunki, w których to wybuchłoby? – avesse

+1

Powinny one współpracować w porządku. Po prostu stosuj standardowe procedury rejestrowania i obsługi wyjątków. Pomyśl o tym, jakbyś rzucił główny program Program.cs, to to samo. Możesz rozważyć ustawienie flagi ponownej próby w kontekście błędu lub po prostu czekać na kolejne wykonanie - dobrze jest, aby zadanie było idempotentne. –

Powiązane problemy