.NET Core 定时任务

自写插件,只需要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怎么关掉休眠机制(服务器过一段时间没请求会自动休眠),休眠会导致这个定时任务停掉,我想解决这个问题,有好解决方案的朋友评论告诉我。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容