美文网首页
.NET Core 定时任务

.NET Core 定时任务

作者: Nolenj | 来源:发表于2019-12-10 17:17 被阅读0次

自写插件,只需要System内置的Timer,自写的原因不会用别人的(滑稽)。

using System;

namespace DAO.Tools
{
    public class Timingtask
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        private Action action;
        private bool First = true;
        public Timingtask(DateTime Time, Action action)
        {
            this.action = action;
            timer.Enabled = true;
            if ((Time - DateTime.Now).TotalMilliseconds < 0) Time= Time.AddDays(1);//指定时间以超过当前时间,那就第二天指定时间执行
            timer.Interval = (Time - DateTime.Now).TotalMilliseconds;//Interval单位:毫秒
            Console.WriteLine(timer.Interval + "后执行第一次任务");
            timer.Start();
            timer.Elapsed += new System.Timers.ElapsedEventHandler(DoTask);
        }
        /// <summary>
        /// 任务,那两个参数是语法,没有深入研究,可以参考https://zhidao.baidu.com/question/623758296841099764.html
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoTask(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (First)
            {
                First = false;
                timer.Interval = 86400000;//当完成第一次任务后,就每隔一天执行一次
            }
            action();
        }
    }
}

然后在程序入口(Program.cs)或者Startup.cs中调用,建议在Startup.cs调用,好获取appsettings.json或其他配置参数,根据个人需要配置,这只是个简单小插件,可以随意扩展。

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddCors(options =>
            {
                options.AddPolicy("AllowSpecificOrigin",
                    builder => builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
            });
            #region 定时任务          
            //每天的16:00执行任务,用Today或者明天后的时间的。
            new Timingtask(DateTime.Today.AddHours(16).AddMinutes(0), () =>
            {
                //要执行的任务                
            });

            #endregion

        }

设计思路:假如每天凌晨更新00:00执行任务,程序启动于20:30,还有三个半钟开始第一次任务,计时器设置每隔12600000毫秒执行一次任务,当完成第一次任务后任务间隔改成86400000毫秒(24小时),之后每天指定时间执行任务。

请教:IIS怎么关掉休眠机制(服务器过一段时间没请求会自动休眠),休眠会导致这个定时任务停掉,我想解决这个问题,有好解决方案的朋友评论告诉我。

相关文章

网友评论

      本文标题:.NET Core 定时任务

      本文链接:https://www.haomeiwen.com/subject/wzmggctx.html