我是C# MVC,在啟動後有透過在Program.cs中加入了ScheduledTasks.Start()
也有在斷點偵測到有運行到ScheduledTasks.Start()
但時間到的時候卻不會執行Execute()的這段function
想請教我的code是不是有問題,有哪裡需要修改的地方
感謝
public class ScheduledTasks
{
public static async void Start()
{
// 設定定時任務
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await scheduler.Start();
// 定義工作
IJobDetail job = JobBuilder.Create<YourJobClass>()
.WithIdentity("jobName", "groupName")
.Build();
// 定義觸發器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("triggerName", "groupName")
.WithDailyTimeIntervalSchedule(
x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(15, 00))
.EndingDailyAfterCount(1))
.Build();
// 排程工作
await scheduler.ScheduleJob(job, trigger);
}
}
public class YourJobClass : IJob
{
private readonly DBmanager _db;
public YourJobClass(DBmanager db) => _db = db;
public async Task Execute(IJobExecutionContext context)
{
await Task.Run(() =>
{
_db.DayBackupERPToCRM();
});
}
}
await scheduler.Start();
這個要放在最後面,試試看
感謝回覆,以下為修改過後的code,但依然不會動qq
public class ScheduledTasks
{
public static async void Start()
{
// 設定定時任務
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
// 定義工作
IJobDetail job = JobBuilder.Create<YourJobClass>()
.WithIdentity("jobName", "groupName")
.Build();
// 定義觸發器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("triggerName", "groupName")
.WithDailyTimeIntervalSchedule(
x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(16, 30))
.EndingDailyAfterCount(1))
.Build();
// 排程工作
await scheduler.ScheduleJob(job, trigger);
await scheduler.Start();
}
}
你可以試試把trigger 先設定簡單一點,像是每5秒一次,
然後先訂另外一個單純寫log的Job,先把情境弄到最單純測試看看。
我自己用的是比較複雜的net core版本,
所以很多要注意的地方不一樣XD