在日常任务/计算机作业上运行程序?

时间:2017-05-18 12:51:12

标签: c# asp.net-mvc cron scheduled-tasks data-import

安排任务或计划工作时究竟涉及什么?我有一个应用程序,我的经理想要在某个时间每天运行,应用程序依赖于用户输入,但它旨在保存用户首选项并加载它们,只要用户单击按钮它将执行任务。假设输入的所有数据都有效,我如何强制每天强制执行此操作。这是在MVC / ASP.NET中,因此它将在Windows上。但是,如果有人可以解释它如何与Linux中的cron作业一起工作,我也可以从那里解决它。我是否需要编写一个调用我的mvc代码的脚本?或任何建议?

1 个答案:

答案 0 :(得分:0)

这是一个在给定时间内每天运行的示例Windows服务,我认为这会对您有所帮助。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace DemoWinService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        System.Timers.Timer _timer;
        List<TimeSpan> timeToRun = new List<TimeSpan>();
        public void OnStart(string[] args)
        {

            string timeToRunStr = "19:01;19:02;19:00"; //Time interval on which task will run
            var timeStrArray = timeToRunStr.Split(';');
            CultureInfo provider = CultureInfo.InvariantCulture;

            foreach (var strTime in timeStrArray)
            {
                timeToRun.Add(TimeSpan.ParseExact(strTime, "g", provider));
            }
            _timer = new System.Timers.Timer(60 * 100 * 1000);
            _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            ResetTimer();
        }


        void ResetTimer()
        {
            TimeSpan currentTime = DateTime.Now.TimeOfDay;
            TimeSpan? nextRunTime = null;
            foreach (TimeSpan runTime in timeToRun)
            {

                if (currentTime < runTime)
                {
                    nextRunTime = runTime;
                    break;
                }
            }
            if (!nextRunTime.HasValue)
            {
                nextRunTime = timeToRun[0].Add(new TimeSpan(24, 0, 0));
            }
            _timer.Interval = (nextRunTime.Value - currentTime).TotalMilliseconds;
            _timer.Enabled = true;

        }

        private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            _timer.Enabled = false;
            Console.WriteLine("Hello at " + DateTime.Now.ToString()); //You can perform your task here
            ResetTimer();
        }
    }
}