Quartz.Net怎么在。网络核心项目中使用

  介绍

本篇文章给大家分享的是有关Quartz.Net怎么在。网络核心项目中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>一、介绍

石英。网络是一个强大,开源,轻量的作业调度框架,是OpenSymphony的石英API的。NET移植,用c#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持用与cron相似的表达式等等。

<强>实践教程

以WebApi项目举例,用VS脚手架功能新建WebApi项目。

public  void  ConfigureServices (IServiceCollection 服务)   {   ,services.AddMvc ();   ,services.AddSingleton();//注册ISchedulerFactory的实例。   以前,}
[路线(“api/(控制器)“))
  ,public  class  ValuesController :控制器
  ,{
  ,private  readonly  ISchedulerFactory  _schedulerFactory;
  ,private  IScheduler  _scheduler;
  ,public  ValuesController (ISchedulerFactory  schedulerFactory)
  ,{
  时间=this._schedulerFactory 才能;schedulerFactory;
  ,}
  ,(HttpGet)
  ,public  async  Task< string[]祝辞,得到()
  ,{//1,通过调度工厂获得调度器
  时间=_scheduler 才能;await  _schedulerFactory.GetScheduler ();//2,开启调度器
  await 才能_scheduler.Start ();//3、创建一个触发器
  var 才能;trigger =, TriggerBuilder.Create ()
  ,,,.WithSimpleSchedule (x =祝辞,x.WithIntervalInSeconds (2) .RepeatForever())//每两秒执行一次
  ,,,.Build ();
  ,//4,创建任务
  var 才能;jobDetail =, JobBuilder.Create ()
  ,,,.WithIdentity (“job",,“group")
  ,,,.Build ();//5,将触发器和任务器绑定到调度器中
  await 才能_scheduler.ScheduleJob (jobDetail,,触发);
  return 才能;await  Task.FromResult (new  string [], {,“value1",,“value2",});
  ,}
  以前,} 
 public  class  MyJob :, IJob//创建IJob的实现类,并实现Excute方法。
  ,{
  ,public  Task 执行(IJobExecutionContext 上下文)
  ,{
  return  Task.Run((),=比;
  ,,{
  ,,时间=using  (StreamWriter  sw  new  StreamWriter (@" C: \ \用户管理员桌面\ \ error.log",,真的,,Encoding.UTF8))
  ,,{
  ,,sw.WriteLine (DateTime.Now.ToString (“yyyy-MM-dd  HH-mm-ss"));
  ,,}
  ,,});
  ,}
  以前,} 

输出的结果:

2018-08-03 00-03-19
00-03-19 2018-08-03 2018-08-03
00-03-22
00-03-22 00-03-24
00-03-24 00-03-26

上面这种执行的工作没有参数,当需要参数可以通过下面两种方法传递参数:

<强> 1,在触发器中添加参数值

, var  trigger3 =, TriggerBuilder.Create ()   ,,.WithSimpleSchedule (x =祝辞x.WithIntervalInSeconds (2) .RepeatForever())//间隔2秒,一直执行   ,,.UsingJobData (“key1",, 321),//通过在触发器中添加参数的值   ,,.UsingJobData (“key2",,“123“)   ,,.WithIdentity (“trigger2",,“group1")   ,,.Build ();

<强> 2,在工作中添加参数值

, IJobDetail  job =, JobBuilder.Create ()   ,,,.UsingJobData (“key1",, 123)//通过工作添加参数的值   ,,,.UsingJobData (“key2",,“123“)   ,,,.WithIdentity (“job1",,“group1")   ,,,.Build ();

通过下面方法在工作中获取参数值

public  class  MyJob : IJob   ,{   ,public  Task 执行(IJobExecutionContext 上下文)   ,{   var 才能;jobData =, context.JobDetail.JobDataMap;//获取中工作的参数      var 才能;triggerData =, context.Trigger.JobDataMap;//获取中触发的参数      var 才能;data =, context.MergedJobDataMap;//获取作业和触发器中合并的参数      var 才能;value1=, jobData.GetInt (“key1");   var 才能;value2=, jobData.GetString (“key2");      var 才能;dateString =, DateTime.Now.ToString (“yyyy-MM-dd  HH-mm-ss"); return  Task.Run((),=比;   {才能   using 才能;(StreamWriter  sw =, new  StreamWriter (@" C: \ \用户管理员桌面\ \ error.log",,真的,,Encoding.UTF8))   {才能   ,,sw.WriteLine (dateString);   ,,}   ,,});   ,}   以前,}

Quartz.Net怎么在。网络核心项目中使用