Quartz.net 的原理可以移步深入解读Quartz的原理,写的很好,很详细。
1、创建一个4.5.2的控制台程序为最佳。
2、nuget引用Quartz.net 3.0.7为最佳。
3、配置一个执行调度的时间。
/** Cron表达式 http://www.bejson.com/othertools/cronvalidate/ * 15 0/1 * * * ? 每分钟的第15秒执行 * 0/15 * * * * ? 每15秒运行一次 * 0 0 1 * * ? 每日凌晨一点执行一次 * 0 0 0 * * ? 每日凌晨12点执行一次待验证 * 0 0 1 ? * WED 每周三 凌晨1点执行 * 0 0 2 1 * ? 每月1号凌晨2点执行一次 */ <!--自动取消订单 10秒一次--> <add key="AutoCancelOrdTime" value="0/10 * * * * ?" />
准备工作完毕,直接上代码。
using Quartz;
using Quartz.Impl;
using System;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
namespace Go.Campuses.Order.AutoTask
{
public partial class AutoOrder : Form
{
/// <summary>
/// The scheduler
/// </summary>
IScheduler _scheduler = null;
/// <summary>
/// 自动取消订单定时配置
/// </summary>
public static readonly string AutoCancelOrdTime =ConfigHelper.GetConfigToString("AutoCancelOrdTime");// 0/10 * * * * ? 10秒钟执行一次
public AutoOrder()
{
InitializeComponent();
}
/// <summary>
/// 加载事件
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
private void AutoCancelOrd_Load(object sender, EventArgs e)
{
Thread taskThread = new Thread(StartTask);
taskThread.Start();
string v = AppDomain.CurrentDomain.BaseDirectory.Split(new char[] {Path.DirectorySeparatorChar},StringSplitOptions.RemoveEmptyEntries).Last();
RichTextBox.AppendText($" {v} \r\n");
RichTextBox.AppendText($"自动取消未支付订单任务-启动成功\r\n");
}
/// <summary>
///启动任务
/// </summary>
private async void StartTask()
{
ISchedulerFactory sf = new StdSchedulerFactory();
if (_scheduler == null)
{
_scheduler = await sf.GetScheduler();
}
await _scheduler.Start();
#region 自动取消未支付订单
//创建任务对象
IJobDetail job1 = JobBuilder.Create<EveryAutoCancelOrdJob>().WithIdentity("job1", "group1").Build();
//创建触发器
ITrigger trigger1 = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().WithCronSchedule(AutoCancelOrdTime).Build();
#endregion
await _scheduler.ScheduleJob(job1, trigger1);
}
}
}还需要一个EveryAutoCancelOrdJob任务类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Go.Campuses.Order.NetWork.WcfHelper;
using Quartz;
namespace Go.Campuses.Order.AutoTask.Comm
{
/// <summary>
///自动取消未支付订单任务类
/// </summary>
/// <seealso cref="Quartz.IJob" />
public class EveryAutoCancelOrdJob : IJob
{
/// <summary>
/// 作业调度定时执行的方法
/// </summary>
/// <param name="context">The execution context.</param>
/// <returns>Task.</returns>
/// <remarks>The implementation may wish to set a result object on the
/// JobExecutionContext before this method exits. The result itself
/// is meaningless to Quartz, but may be informative to
/// <see cref="T:Quartz.IJobListener" />s or
/// <see cref="T:Quartz.ITriggerListener" />s that are watching the job's
/// execution.</remarks>
public virtual Task Execute(IJobExecutionContext context)
{
return Task.Factory.StartNew(() =>
{
EveryTask();
});
}
/// <summary>
///任务实现 直接调用服务或者具体逻辑代码
/// </summary>
public void EveryTask()
{
try
{
Result ret = WcfHelper.AutoCancelOrd();
}
catch
{
}
}
}
}欢迎大家伙儿交流和提出问题!
川公网安备 51010702003150号
留下您的脚步
最近评论