c# .net中的简单Job

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Timers;

namespace TestJobs
{
    class Program
    {
        private static readonly CronMon CronMon = new CronMon();
        static void Main(string[] args)
        {
            Start();
            Console.ReadKey();
        }
        public static void Start()
        {
            CronMon.AddJob(new Job());
            CronMon.AddJob(new Job(10));
            CronMon.AddJob(new Job(5));
            CronMon.Start();
        }
    }
    class Job:CronJobBase
    {
        private int _span = 0;
        public Job()
        {
        }
        public Job (int span)
            :base(span)
        { this._span = span; }
        protected override void Execute()
        {
            if (_span == 0)
                Console.WriteLine("我是Job,我使用默认时间执行!"+DateTime.Now.ToString("s"));
            else
                Console.WriteLine("我是Job,我间隔{0}s执行!{1}", _span, DateTime.Now.ToString("s"));
        } 
    }

    interface ICronJob
    {
        void Run(DateTime dateTime);
        void Abort();
    }
    class CronJobBase : ICronJob
    {
        private readonly object _object = new object();
        private  Thread _thread;
        private DateTime _runTime = DateTime.Now;
        private  int _span=3;//时间间隔 3s
        public CronJobBase()
        {

        }
        public CronJobBase(int span)
        {
            _span = span;
        }
        public void Run(DateTime dateTime)
        {
            if (_thread != null && _thread.ThreadState == ThreadState.Running)
                return;
            if (_runTime.AddSeconds(_span) > dateTime)
                return;
            _runTime = dateTime;
            _thread = new Thread(ExecuteHandler);
            _thread.Start();
        }

        public void Abort()
        {
            _thread.Abort();
        }
        private void ExecuteHandler()
        {
            try
            {
                Execute();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        protected virtual void Execute()
        {

        }
    }
    interface ICronMon
    {
        void AddJob(ICronJob job);
        void Start();
        void Stop();
    }
    class CronMon:ICronMon
    {
        private readonly System.Timers.Timer _timer = new System.Timers.Timer(1000);
        private readonly List<ICronJob> _jobs = new List<ICronJob>();
        private DateTime _last = DateTime.Now;

        public CronMon()
        {
            _timer.AutoReset = true;
           _timer.Elapsed+=_timer_Elapsed;
        }

        private void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (DateTime.Now.Second != _last.Second)
            {
                _last = DateTime.Now;
                foreach (var item in _jobs)
                {
                    item.Run(DateTime.Now);
                }
            }
        }

        public void AddJob(ICronJob job)
        {
            _jobs.Add(job);
        }

        public void Start()
        {
          _timer.Start();
        }

        public void Stop()
        {
            _timer.Stop();
            foreach (var item in _jobs)
            {
                item.Abort();
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/Arvin-Ou/p/9077898.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
quartz.net 是一个开源的调度框架,用于在 .NET 应用程序实现任务的调度和管理。它提供了丰富的功能和灵活的配置选项,可以满足各种任务调度的需求。 Quartz.net 的源代码是用 C# 编写的,它包含了框架的核心逻辑和各种扩展功能的实现。源代码的主要模块包括调度器(Scheduler)、触发器(Trigger)、任务(Job)、作业存储(Store)等。 调度器(Scheduler)是 Quartz.net 的核心组件,负责管理和控制任务的调度。它根据设定的时间规则和条件,自动触发任务的执行。通过调度器可以添加、删除、修改任务,以及查询任务的执行记录和状态。 触发器(Trigger)用于定义任务执行的时间规则。Quartz.net 提供了多种类型的触发器,如简单触发器(SimpleTrigger)、日历触发器(CalendarTrigger)、Cron 触发器(CronTrigger)等。用户可以根据任务的需求选择合适的触发器类型,并设置触发器的属性和参数。 任务(Job)是要执行的具体工作代码。Quartz.net 允许用户定义自己的任务,通过实现 IJob 接口来执行任务逻辑。任务可以在任务类定义一些属性和方法,用于接收和处理任务的参数和状态。 作业存储(Store)是用于存储任务和触发器的持久化模块。Quartz.net 支持多种作业存储器,如内存存储器(MemoryStore)、数据库存储器(AdoJobStore)等。用户可以根据自己的需求选择合适的作业存储器,并配置连接字符串等参数。 总的来说,Quartz.net 的源代码是一个功能丰富且高度可扩展的调度框架,它提供了灵活的任务调度管理功能。通过深入理解源代码,用户可以更好地理解框架的工作原理,并在需求变更时进行二次开发和定制化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值