>.NET Core|--Quartz.Net|--控制台应用程序

发布时间 2023-07-25 19:09:57作者: zh89233

前言

#Visual Studio 版本
Microsoft Visual Studio Professional 2022 (64 位)

#Quartz.Net 版本
Quartz.Net 3.6.3

#C#语言版本 ( 别小看这个, 否则我下面的代码在你那里很可能跑不起来 )
10.0

安装Quartz.Net

我是直接通过Nuget包管理器安装的

其它安装方式, 也可以使用命令安装

Install-Package Quartz -Version 3.6.3

添加一个"IJob"的实现类

namespace Test.Job
{
    internal class TestQuarztJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine(DateTime.Now);
            return Task.CompletedTask;
        }
    }
}

启动项

using Quartz.Impl;
using Quartz;
using Test.Job;


//这里是使用顶级域名( 注意C#预览版本 )
/*
需要配置语言版本 > 10.0 
例如 : 我这里的配置是 "<LangVersion>10.0</LangVersion>"
*/
await MainAsync();


static async Task MainAsync()
{
    var schedulerFactory = new StdSchedulerFactory();
    var scheduler = await schedulerFactory.GetScheduler();
    await scheduler.Start();
    Console.WriteLine($"任务调度器已启动");

    //创建作业和触发器
    var jobDetail = JobBuilder.Create<TileQuarztJob>().Build();

    var trigger = TriggerBuilder
        .Create()
        .WithCronSchedule("0/10 * * * * ?")
        .Build();

    //添加调度
    await scheduler.ScheduleJob(jobDetail, trigger);

    #region 我这里也遇到坑了...

    //不加这句代码"Console.ReadKey();", 会直接退出进程
    /*
     E:\Code\Test.Job\bin\Debug\net7.0\Test.Job.exe (进程 11124121918000000)已退出,代码为 0。
    要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
    按任意键关闭此窗口. . .
     */
    Console.ReadKey();

    #endregion
    await scheduler.Shutdown();
}

问题1.启动相关问题

using Quartz.Impl;
using Quartz;

namespace Test
{
    internal class Program
    {
        static void Main(string[] args)
        {
			//如何启动???
        }

        static async Task MainAsync()
        {
            var schedulerFactory = new StdSchedulerFactory();
            var scheduler = schedulerFactory.GetScheduler().Result;
            await scheduler.Start();
            Console.WriteLine($"任务调度器已启动");

            //创建作业和触发器
            var jobDetail = JobBuilder.Create<TileQuarztJob>().Build();

            var trigger = TriggerBuilder
                .Create()
                .WithCronSchedule("0 0/1 * * * ?")
                .Build();

            //添加调度
            await scheduler.ScheduleJob(jobDetail, trigger);
            Console.WriteLine("Hello, World!");
        }
    }
}

#解决方案 -- 启动程序那里, 我修改为顶级域名,

await MainAsync();

static async Task MainAsync()
{
//TODO : 
}
#并且要记得加上"Console.ReadKey();"

尾言


一个控制台程序也不简单啊, 也遇到坑了...

程序启动直接跑异步没搞过, 
忘了"Console.ReadKey();"...

惭愧惭愧...