2017-08-24 35 views
1

使用Quartz.Net我想手動觸發一個沒有時間表的工作(現在)。然而,作業在啓動時運行(我不想),然後無法響應手動觸發器(主要問題)。手動觸發一個不工作的工作

private IScheduler _scheduler; 

public void SetupAndTestScheduler() 
{ 
    ISchedulerFactory sf = new StdSchedulerFactory(); 
    _scheduler = sf.GetScheduler().Result; 
    _scheduler.Start(); 
    _scheduler.ScheduleJob(
     new JobDetailImpl(nameof(TestDataJob), typeof(TestDataJob)), null); 

    // manually trigger the job 
    _scheduler.TriggerJob(jobKey: new JobKey(nameof(TestDataJob))); 
} 

public class TestDataJob : IJob 
{ 
    public Task Execute(IJobExecutionContext context) 
    { 
     // blah blah blah 
    } 
} 

我在NetStandard2.0上,用Quartz.Net Alpha 3.我想知道這是否是版本3的問題?

回答

1

在Quartz.Net 3.X阿爾法,方法,如scheduler.Startscheduler.ScheduleJob,等等,現在async,這意味着你需要await他們。代碼中會發生的情況是ScheduleJob返回的Task在調用Shutdown之前甚至沒有執行,因爲您並未等待它。

您可以按照Quick Start Guide瞭解如何使用它。

簡而言之,你需要做什麼:

  • 使用async/await語義
  • 通過調用scheduler.AddJob方法任務添加到調度程序(你的工作必須聲明爲在耐用情況下,你是不是關聯與它觸發)
  • ,然後你可以調用scheduler.TriggerJob()方法來觸發你的工作