Quartz.NET

 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

Quartz.NET框架的核心是调度器。调度器负责管理Quartz.NET应用运行时环境。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz.NET怎样能并发运行多个作业的原理。Quartz.NET依赖一套松耦合的线程池管理部件来管理线程环境。作业是一个执行任务的简单.NET类。只需实现Quartz.IJob接口,IJob接口包含唯一的一个方法Execute(),作业从这里开始执行。一旦实现了IJob接口和Execute ()方法,当Quartz.NET确定该是作业运行的时候,它将调用作业。Execute()方法内就是要做的事情。

代码下载地址:http://download.csdn.net/download/sdsasasd/4655892

Quartz.NET 是一个开源的作业调度框架,它可以被在小型应用程序甚至是企业级的应用程序。它有如下几个特点:

  • API 操作简单,只要几行简单的代码你就可以在应用程序里面实现自己的作业调度,并实时监视作业执行情况
  • 触发器功能强大,比 Windows 的任务计划提供更细的触发粒度,你可以使用“Cron表达式(后文将介绍)”来实现如:每周星期一到星期五 8:00am,5:00pm(工作时间) 执行某一件任务
  • 良好的可扩展性,它基于接口编程,你可以实现自己的 Schedule 调度器,Job 作业,以及 Trigger 触发器等
  • 作业可以保存在 RAM 中,也可以持久化到数据库,支持多种数据库类型:SqlServer、Oracle、MySql等
  • 集群,这是一个高级应用,可以在多台计算机之间创建负载平衡、容错处理
测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quartz;
using Quartz.Impl;
using Common.Logging;
namespace TestQuartz
{
    public class Job1 : IJob
    {
        private int i = 0;
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine(++i);
        }
    }

    class Program
    {
       

        static void Main(string[] args)
        {

            //初始化调度器工厂 
            ISchedulerFactory sf = new StdSchedulerFactory();
            //获取默认调度器 
            IScheduler scheduler = sf.GetScheduler();

            //作业 
            IJobDetail job = JobBuilder
                    .Create<Job1>()
                    .WithIdentity("计算作业", "组1")
                    .RequestRecovery() // ask scheduler to re-execute this job if it was in progress when the scheduler went down...
                    .Build();


            //触发器 
            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
                                              .WithIdentity("触发器1", "触发器组1")
                                              .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
                                              .WithSimpleSchedule(x => x.WithRepeatCount(20).WithInterval(TimeSpan.FromSeconds(5)))
                                              .Build();

            //关联任务和触发器 
            scheduler.ScheduleJob(job, trigger);
            //开始任务 
            scheduler.Start();
            Console.Read();
        }

    }
}



你可能感兴趣的:(Quartz.NET)