مخطط المهام بلغة C# (.NET): Quartz.NET، Hangfire، Coravel

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مخطط المهام بلغة 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                    

توصيات