C# 实现定时/循环任务
用C#实现定时/循环任务,需要使用到Quartz,在项目的NuGet包管理中可以找到并添加。一般还会伴随安装一个Log4Net,主要用它来记录在任务执行过程中遇到的问题。这边主要是讲实现定时/循环任务,就不再赘述。

要实现定时/循环任务,就需要用到C#的作业和触发器
作业:
1.作业创建:
JobBuilder.Create<TestJob>() 这里的<TestJob>就是你实现具体任务的类
IJobDetail job1 = JobBuilder.Create<TestJob>()
.WithIdentity(jobName, gropName) //为该job的jobName和gropName赋值,相当于给予一个身份(非必须)
.UsingJobData("key", "value")//为作业的具体任务传递参数,键值对(非必须)
.Build();//创建作业(必须)
2.作业的具体任务
这时候要创建一个类,继承IJob,并实现接口方法,此方法是触发器触发时调用的方法,所以在这里写你的任务。
using log4net;
using Quartz;
using System;using System.Threading.Tasks; namespace BackgroundTask.job
{
public class TestJob : IJob
{
private readonly ILog _log = LogManager.GetLogger(typeof(TestJob));//利用Log来记录在任务执行过程中遇到的问题
public void Execute(IJobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
string k = dataMap.GetString("key");//在这里获取到参数,有GetInt,GetXXX等等,满足参数的类型需求// 以下开始写你的任务代码,
Console.WriteLine(“123321”);
}
}
}
触发器:
1.触发器的声明
现在的版本,触发器创建和设置需要采用异步方法。
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler(); //从工厂中获取一个调度器实例化
2.触发器的设置
循环触发器设置:
// 创建触发器
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity(tiggerName, gropName) //为触发器的tiggerName和gropName赋值,相当与给予一个身份
.StartNow() //现在开始
.WithSimpleSchedule(x => x
.WithIntervalInSeconds() //触发时间,10秒一次。
.RepeatForever()) //不间断重复执行
.Build(); //最终创建 await scheduler.ScheduleJob(job1, trigger1); //把作业,触发器加入调度器。
await scheduler.Start();
定时触发器设置:
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
//.StartAt(startTime).EndAt(endTime) //开始时间,结束时间
.WithCronSchedule(cronExpression) //设置定时触发规则 cronExpression字符串就包含了规则
.Build(); //最终创建 await scheduler.ScheduleJob(job1, trigger); await scheduler.Start();
任务和触发器的关闭
还记得在创建作业和触发器时候给的那个身份吗?在关闭的时候可以指定关闭对象
TriggerKey triggerKey = new TriggerKey(tiggerName, gropName);
JobKey jobKey = new JobKey(jobName, gropName);
if (scheduler != null)
{
scheduler.PauseTrigger(triggerKey);
scheduler.UnscheduleJob(triggerKey);
scheduler.DeleteJob(jobKey);
scheduler.Shutdown();// 关闭
}
自此,我们对实现定时/循环任务就有了个清晰的思路
1 新建一个控制台项目。
2 建一个类,在此类中创建作业和触发器。
3 再建一个类,此类继承IJob接口,实现Excute方法。此类作为作业的具体实行任务。
4 执行该项目。
附带知识点:
CronExpression 规则


C# 实现定时/循环任务的更多相关文章
- PHP 后台定时循环刷新某个页面 屏蔽apache意外停止
PHP 后台定时循环刷新某个页面 如果间隔时间过长的话 会出现apache自动停止的现象.出现的原因则是设置了 <IfModule mpm_winnt_module> ThreadsPe ...
- Android Timer 的 schedule()方法定时循环切换图片
void java.util.Timer.schedule(TimerTask task, long delay, long period)第一个参数,是 TimerTask 类,在包:import ...
- winform视频教程-任务定时循环执行小工具
有时候,我们可能遇到这样的一种需求,就是需要有一个小工具,在服务器中不断的执行一些任务,那么这样的需求,我们可以做一个windows服务程序,或者做一个winform wpf等小程序,然后小程序里面开 ...
- Java 定时循环运行程序
Timer 和 ScheduledExecutorSeruvce 都能执行定时的循环任务,有函数 scheduleAtFixedRate.但是,如果任务运行时间较长,超过了一个周期时长,下一个任务就会 ...
- mysql 定时计划任务 wish 按照id分组定时循环启动
SELECT count(*) FROM wish_sellers_in;UPDATE wish_sellers_in SET act_status =0 WHERE id >=1 AND ...
- JS定时循环
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- python 实现定时循环触发某个方法
直接贴上代码 import threading def sayhello(): print "hello world" global t #Notice: use global v ...
- VC中基于 Windows 的精确定时[转]
在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要 ...
- Delphi中怎么结束线程(这个线程是定时执行的)(方案二)
上篇博客中提出了一个问题:怎么结束一个定时循环执行的线程,并给出了一个解决方案,但是又出现了一个问题,详细去参考上一篇博客. 然后出去撒了个尿,突然脑子里出现了一个想法(看来工作和思考久了,出去走走, ...
随机推荐
- ECharts使用教程
引入 ECharts ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器.因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 scrip ...
- PHP 连接数据库基础操作
<?phpheader('Content-type:text/html;charset=utf-8');//1建立 或者 关闭mysql服务器 @符号用于屏蔽错误信息$link=@mysql ...
- Python中对文件的读写
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘. 读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系 ...
- 《计算机网络》课程笔记 (Ch03-运输层)
为运行在不同主机上的应用进程之间提供逻辑通信功能. 将应用层报文切分为块,然后加上运输层首部,形成报文段,交付给网络层. 多路复用与多路分解 将网络层提供的主机到主机交付服务延伸到进程到进程交付服务. ...
- 什么,容器太多操作不过来?我选择Docker Compose梭哈
接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧 一.容器之间通信 1.单向通信 1.1.什么意思 mysql和tomcat是两个独立的容器,但是tomcat需要和 ...
- centos系统与ubuntu系统的区别
centos和ubuntu简述 CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Lin ...
- Java实现蓝桥杯 算法提高 盾神与积木游戏
题目描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他 小朋 ...
- 第八届蓝桥杯JavaC组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.数位和 题目描述 数学家高斯很小的时候就天分过人.一次老师指定的算数题目是:1+2+-+100. 高斯立即做出答案:5050! 这次你 ...
- java实现第三届蓝桥杯拼音字母
拼音字母 在很多软件中,输入拼音的首写字母就可以快速定位到某个词条.比如,在铁路售票软件中,输入: "bj"就可以定位到"北京".怎样在自己的软件中实现这个功能 ...
- java实现第五届蓝桥杯海盗分金币
海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩上发现 ...