مخطط المهام بلغة C# (.NET): نظرة عامة وأمثلة
في التطوير الحديث بلغة C# (.NET)، غالبًا ما تنشأ الحاجة لتنفيذ كود وفقًا لجدول زمني: إرسال النشرات البريدية، تحديث ذاكرة التخزين المؤقت، أرشفة السجلات أو تشغيل عمليات ETL. لهذا الغرض، توجد مكتبات متخصصة — مخططات المهام (Job Schedulers). في هذه المقالة، سنستعرض ثلاثة حلول شائعة: Quartz.NET، Hangfire و Coravel، بالإضافة إلى تقديم أمثلة على استخدامها.
1. Quartz.NET — مخطط قوي ومرن
Quartz.NET هو نسخة من إطار العمل الشهير Quartz بلغة Java. يدعم جداول زمنية معقدة باستخدام تعبيرات cron، واستمرارية المهام في قاعدة البيانات، والتجميع العنقودي (Clustering)، والمشغلات (Triggers).
التثبيت
dotnet add package Quartzمثال: مهمة بسيطة بجدول cron
using Quartz;using Quartz.Impl;
public class HelloJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"مرحبًا! الوقت: {DateTime.Now}"); }}
// إعداد المخططISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler = await schedulerFactory.GetScheduler();
// تعريف المهمةIJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("helloJob", "group1") .Build();
// المشغل: كل 10 ثوانٍITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/10 * * * * ?") // كل 10 ثوانٍ .ForJob(job) .Build();
await scheduler.ScheduleJob(job, trigger);await scheduler.Start();الميزات:
- دعم تعبيرات cron (مثل
0 0 12 * * ?— كل يوم في الظهيرة). - تخزين المهام في ADO.NET (SQL Server، PostgreSQL، MySQL).
- إمكانية إنشاء/حذف المهام ديناميكيًا.
- التجميع العنقودي لتحمل الأخطاء.
2. Hangfire — البساطة ولوحة التحكم المدمجة
Hangfire هي مكتبة لتنفيذ المهام الخلفية بأقل قدر من التكوين. توفر لوحة تحكم ويب مدمجة للمراقبة، ومحاولات إعادة تلقائية عند الأخطاء، وتكامل مع ASP.NET Core.
التثبيت
dotnet add package Hangfiredotnet add package Hangfire.SqlServer # للتخزين في SQL Serverمثال: مهمة مؤجلة ومتكررة
using Hangfire;
// الإعداد في ملف Startup.cspublic void ConfigureServices(IServiceCollection services){ services.AddHangfire(config => config.UseSqlServerStorage("connection_string")); services.AddHangfireServer();}
public void Configure(IApplicationBuilder app){ app.UseHangfireDashboard(); // /hangfire // مهمة متكررة: كل 5 دقائق RecurringJob.AddOrUpdate( "cleanup-cache", () => Console.WriteLine("تنظيف ذاكرة التخزين المؤقت..."), "*/5 * * * *"); // مهمة مؤجلة (بعد ساعة واحدة) BackgroundJob.Schedule( () => SendEmail("user@example.com"), TimeSpan.FromHours(1));}
public void SendEmail(string email){ Console.WriteLine($"إرسال بريد إلكتروني إلى {email}");}المزايا:
- لوحة تحكم مدمجة (
/hangfire) لعرض حالة المهام. - إعادة تلقائية عند الفشل.
- دعم قوائم الانتظار (افتراضيًا — Redis أو SQL Server).
- تكامل بسيط مع ASP.NET Core عبر حقن التبعيات (DI).
3. Coravel — مخطط خفيف لـ .NET Core
Coravel هي مكتبة بسيطة لا تتطلب تبعيات خارجية (باستثناء .NET نفسها). إنها مثالية للمشاريع الصغيرة التي لا تحتاج إلى استمرارية المهام.
التثبيت
dotnet add