C# (.NET) में कार्य शेड्यूलर: Quartz.NET और System.Threading.Timer

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# (.NET) में कार्य शेड्यूलर: सरल टाइमर से लेकर औद्योगिक Quartz.NET तक

\n

कार्य शेड्यूलर (Task Scheduler) किसी भी गंभीर एप्लिकेशन का एक अनिवार्य हिस्सा है। चाहे वह कैश की समय-समय पर सफाई हो, ईमेल न्यूज़लेटर भेजना हो, या बाहरी API के साथ डेटा सिंक्रोनाइज़ेशन हो - बैकग्राउंड ऑपरेशन निष्पादित करने के लिए एक विश्वसनीय तंत्र के बिना काम नहीं चल सकता। .NET इकोसिस्टम में, डेवलपर के पास कई दृष्टिकोण उपलब्ध हैं: अंतर्निहित System.Threading.Timer से लेकर शक्तिशाली और लचीले फ्रेमवर्क Quartz.NET तक। इस लेख में, हम दोनों विकल्पों पर चर्चा करेंगे, कोड उदाहरण दिखाएंगे, और आपके प्रोजेक्ट के लिए उपयुक्त टूल चुनने में मदद करेंगे।

\n\n

1. अंतर्निहित System.Threading.Timer

\n

शेड्यूल पर कार्य चलाने का सबसे सरल और हल्का तरीका System.Threading.Timer का उपयोग करना है। इसे तृतीय-पक्ष पैकेज स्थापित करने की आवश्यकता नहीं है और यह सरल परिदृश्यों के लिए आदर्श है: निश्चित अंतराल पर विधि निष्पादित करना या एक बार की देरी।

\n\n

उदाहरण: हर 5 सेकंड में कार्य निष्पादित करना

\n
using System;\nusing System.Threading;\n\nclass Program\n{\n    static void Main()\n    {\n        // एक टाइमर बनाएँ जो हर 5 सेकंड में callback चलाता है\n        Timer timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));\n        \n        Console.WriteLine("टाइमर शुरू हो गया है। बाहर निकलने के लिए Enter दबाएँ।");\n        Console.ReadLine();\n        \n        timer.Dispose();\n    }\n\n    static void DoWork(object state)\n    {\n        Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] बैकग्राउंड कार्य निष्पादित हो रहा है...");\n    }\n}\n
\n

लाभ:

\n
    \n
  • .NET में अंतर्निहित, अतिरिक्त लाइब्रेरी की आवश्यकता नहीं।
  • \n
  • न्यूनतम संसाधन खपत।
  • \n
  • उपयोग में सरलता।
  • \n
\n

नुकसान:

\n
    \n
  • CRON एक्सप्रेशन के लिए कोई अंतर्निहित समर्थन नहीं।
  • \n
  • अलग-अलग शेड्यूल वाले कई कार्यों को प्रबंधित करना कठिन।
  • \n
  • कोई स्थायित्व तंत्र नहीं (रीस्टार्ट करने पर कार्य खो जाते हैं)।
  • \n
  • Callback पूल से थ्रेड में निष्पादित होता है, सिंक्रोनाइज़ेशन में समस्याएँ हो सकती हैं।
  • \n
\n

शैक्षिक प्रोजेक्ट और सरल उपयोगिताओं के लिए, System.Threading.Timer एक उत्कृष्ट विकल्प है। हालाँकि, दर्जनों कार्यों वाले प्रोडक्शन एप्लिकेशन के लिए, अधिक उन्नत समाधानों पर विचार करना चाहिए।

\n\n

2. Quartz.NET — औद्योगिक कार्य शेड्यूलर

\n

Quartz.NET .NET में कार्य शेड्यूलिंग के लिए एक शक्तिशाली, लचीला और परिपक्व फ्रेमवर्क है। यह लोकप्रिय Java समकक्ष Quartz से प्रेरित है और निम्नलिखित का समर्थन करता है:

\n
    \n
  • लचीले शेड्यूल के लिए CRON एक्सप्रेशन (हर दूसरे घंटे, कार्यदिवसों पर सुबह 9:00 बजे, आदि)।
  • \n
  • कार्यों की स्थायित्व (डेटाबेस में सहेजना)।
  • \n
  • क्लस्टरिंग (कई सर्वर कार्य निष्पादित कर सकते हैं)।
  • \n
  • छूटे हुए कार्य (misfire handling)।
  • \n
  • चाइल्ड कार्य और ट्रिगर।
  • \n
\n\n

Quartz.NET स्थापित करना

\n

NuGet के माध्यम से पैकेज स्थापित करें:

\n
dotnet add package Quartz
\n\n

उदाहरण: CRON शेड्यूल के साथ सरल कार्य

\n
using System;\nusing System.Threading.Tasks;\nusing Quartz;\nusing Quartz.Impl;\n\nclass Program\n{\n    static async Task Main()\n    {\n        // शेड्यूलर बनाएँ\n        StdSchedulerFactory factory = new StdSchedulerFactory();\n        IScheduler scheduler = await factory.GetScheduler();\n        await scheduler.Start();\n\n        // कार्य (Job) परिभाषित करें\n        IJobDetail job = JobBuilder.Create<HelloJob>()\n            .WithIdentity("helloJob", "group1")\n            .Build();\n\n        // ट्रिगर बनाएँ: प्रतिदिन सुबह 10:30 बजे\n        ITrigger trigger = TriggerBuilder.Create()\n            .WithIdentity("trigger1", "group1")\n            .WithCronSchedule("0 30 10 ? * * *")  // CRON: सेकंड, मिनट, घंटा, दिन, महीना, सप्ताह का दिन\n            .Build();\n\n        // ट्रिगर के साथ कार्य पंजीकृत करें\n        await scheduler.ScheduleJob(job, trigger);\n\n        Console                    

अनुशंसाएँ