前言
#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();"...
慚愧慚愧...