>.NET Core|--Quartz.Net|--控制檯應用程序

前言

#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();"...

慚愧慚愧...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章