Cara bekerja dengan Quartz.Net di C #

Semasa mengerjakan aplikasi, anda sering kali perlu melaksanakan tugas-tugas tertentu di latar belakang dalam selang waktu yang telah ditentukan. Menjadwalkan pekerjaan dalam aplikasi adalah satu cabaran, dan anda dapat memilih dari banyak kerangka kerja yang tersedia di sekitar, seperti Quartz, Hangfire, dll.

Quartz.Net telah lama digunakan dan memberikan sokongan yang lebih baik untuk bekerja dengan ekspresi Cron. Hangfire adalah satu lagi kerangka kerja penjadual pekerjaan yang memanfaatkan saluran pemprosesan permintaan ASP.Net untuk memproses dan melaksanakan pekerjaan.

Quartz.Net adalah port .Net kerangka penjadualan pekerjaan Java yang popular. Ini adalah sistem penjadualan pekerjaan sumber terbuka yang dapat digunakan dari aplikasi terkecil hingga sistem perusahaan berskala besar. Laman web rasmi Quartz.Net menyatakan: "Quartz.Net adalah sistem penjadualan pekerjaan sumber terbuka yang lengkap dan boleh digunakan dari aplikasi terkecil hingga sistem perusahaan berskala besar."

Bermula

Anda boleh memasang Quartz.Net dari bahagian muat turun di laman web rasmi Quartz. Anda juga boleh memasang Quartz.Net melalui Tetingkap Pengurus Pakej di Visual Studio IDE anda.

Tiga komponen utama dalam Quartz adalah pekerjaan, pencetus dan penjadual, iaitu untuk membuat dan menjadwalkan pekerjaan di Quartz.Net, anda perlu mempunyai penjadual, pencetus dan pekerjaan. Walaupun pekerjaan menunjukkan tugas yang harus dilaksanakan, pemicu digunakan untuk menentukan bagaimana pekerjaan itu akan dilaksanakan. Penjadual adalah komponen yang menjadualkan pekerjaan. Perhatikan bahawa anda harus mendaftarkan pekerjaan dan pencetus anda dengan penjadual.

Pengaturcaraan Quartz.Net di C #

Untuk membuat pekerjaan, anda harus membuat kelas yang menerapkan antara muka IJob. Secara tidak sengaja, antara muka ini menyatakan kaedah Jalankan - anda harus menerapkan kaedah ini di kelas pekerjaan khusus anda. Coretan kod berikut menggambarkan bagaimana anda dapat melaksanakan antara muka IJob untuk merancang kelas pekerjaan khusus menggunakan perpustakaan Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Berikut adalah pelaksanaan kaedah Eksekusi sederhana dari kelas Pekerjaan - Saya akan menyerahkan kepada anda untuk merancang kelas pekerjaan khusus anda agar sesuai dengan keperluan aplikasi anda. Coretan kod yang diberikan di bawah menulis nilai DateTime semasa sebagai teks ke fail. Perhatikan bahawa pelaksanaan ini tidak selamat di benang; ia hanya untuk tujuan ilustrasi sahaja.

public void Execute(IJobExecutionContext context)

        {

            using (StreamWriter streamWriter = new StreamWriter(@"D:\Log.txt", true))

            {

                streamWriter.WriteLine(DateTime.Now.ToString());

            }

        }

Setelah anda menentukan kelas pekerjaan, anda perlu membuat kelas penjadual kerja anda sendiri dan menentukan pencetus pekerjaan anda. Pencetus akan mengandungi metadata tugas sebagai ungkapan cron. Anda boleh melayari pautan ini untuk menghasilkan ungkapan cron.

Sekarang, bagaimana pekerjaan dijadualkan? Baiklah, ada komponen yang disebut penjadual kerja yang bertanggungjawab untuk menjadwalkan pekerjaan anda. Pada hakikatnya, anda boleh memanfaatkan penjadual kerja untuk menjadualkan tugas anda untuk pelaksanaan. Penyenaraian kod berikut menggambarkan bagaimana kita dapat menentukan pencetus untuk pekerjaan kita dan kemudian mendaftarkan pekerjaan dan pencetus dengan penjadual kerja.

public class JobScheduler

   {

       public static void Start()

       {

           IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

           scheduler.Start();

           IJobDetail job = JobBuilder.Create().Build();

           ITrigger trigger = TriggerBuilder.Create()

               .WithIdentity("Job", "")

               .WithCronSchedule("0 0/1 * 1/1 * ? *")

               .StartAt(DateTime.UtcNow)

               .WithPriority(1)

               .Build();

              scheduler.ScheduleJob(job, trigger);

       }

   }

Rujuk senarai kod yang diberikan di atas. Perhatikan bagaimana nama dan kumpulan pemicu telah ditentukan semasa membuat contoh pencetus. Setelah pencetus tugas ditentukan dan dikonfigurasi menggunakan ungkapan cron yang diperlukan, pemicu didaftarkan dengan penjadual tugas.

Anda juga boleh membina pemicu yang dipecat setiap saat dan mengulanginya selama-lamanya. Berikut adalah coretan kod yang menggambarkan bagaimana anda boleh membina pencetus seperti ini.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Anda tidak selalu memerlukan perkhidmatan windows untuk memulakan penjadual anda. Sekiranya anda menggunakan aplikasi web ASP.Net, anda dapat memanfaatkan acara Application_Start dari file Global.asax dan kemudian membuat panggilan ke kaedah JobScheduler.Start () seperti yang ditunjukkan dalam coretan kod di bawah.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Perhatikan bahawa JobScheduler adalah nama kelas khusus yang kami reka sebelumnya. Perhatikan bahawa anda juga dapat memanfaatkan Quartz.Net untuk menyimpan pekerjaan anda ke penyimpanan berterusan, iaitu, anda juga dapat meneruskan pekerjaan anda di dalam pangkalan data. Anda boleh mengetahui senarai semua kedai pekerjaan yang disokong dari sini.