2015-02-11 78 views
3

我正在編寫一個MVC 5互聯網應用程序,並且正在使用HangFire進行重複性任務。HangFire循環任務數據

如果我有每月一次的循環任務,我如何獲得下一個執行時間的值?

這裏是我的重複任務代碼:

RecurringJob.AddOrUpdate("AccountMonthlyActionExtendPaymentSubscription",() => accountService.AccountMonthlyActionExtendPaymentSubscription(), Cron.Monthly); 

我可以檢索作業數據如下:

using (var connection = JobStorage.Current.GetConnection()) 
{ 
    var recurringJob = connection.GetJobData("AccountMonthlyActionExtendPaymentSubscription"); 
} 

但是,我不知道下一步該怎麼做。

是否有可能獲得循環任務的下一個執行時間?

在此先感謝。

回答

12

你很近。我不知道是否有一個更好的或其他更直接的方式來獲得這些細節,但遲髮型儀表板做的方式是使用擴展方法(添加using Hangfire.Storage;到您的進口)稱爲GetRecurringJobs()

using (var connection = JobStorage.Current.GetConnection()) 
{ 
    var recurring = connection.GetRecurringJobs().FirstOrDefault(p => p.Id == "AccountMonthlyActionExtendPaymentSubscription"); 

    if (recurring == null) 
    { 
     // recurring job not found 
     Console.WriteLine("Job has not been created yet."); 
    } 
    else if (!recurring.NextExecution.HasValue) 
    { 
     // server has not had a chance yet to schedule the job's next execution time, I think. 
     Console.WriteLine("Job has not been scheduled yet. Check again later."); 
    } 
    else 
    { 
     Console.WriteLine("Job is scheduled to execute at {0}.", recurring.NextExecution); 
    } 
} 

有兩個漁獲:

  1. 它返回所有經常性工作,你需要選擇適當的記錄出來的結果
  2. 當你第一次創建工作中,NextExecution時間不可用的,但(這將爲空)。我相信,一旦連接了服務器,服務器就會定期檢查需要安排的循環任務,並且這樣做;他們似乎並沒有立即安排使用RecurringJob.AddOrUpdate(...)或其他類似的方法創建。如果您需要在創建後立即獲得NextExecution值,我不確定您可以做什麼。儘管如此,它最終會被填充。
+0

我有1個mvc應用程序和1個控制檯應用程序。在我的主要方法的控制檯應用程序中,我配置了Hangfire服務器,並有1個while循環以便我的控制檯應用程序繼續運行。在控制檯應用程序中,我有1個方法執行後臺處理。我想在控制檯應用程序中進行後臺處理,因此我在控制檯應用程序中配置了HF服務器。但是我沒有得到如何從mvc入隊執行我的控制檯應用程序的方法 – 2018-02-05 14:51:55