C#编程之c# .net中的简单Job
小标 2018-11-14 来源 : 阅读 2004 评论 0

摘要:本文主要向大家介绍了C#编程之c# .net中的简单Job,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之c# .net中的简单Job,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

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 _jobs = new List();
        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();
            }
        }
    }
}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程