2015-09-15 192 views
3

我有一個hangfire服務器正在運行。 我創建了一個後臺作業如下Hangfire只運行後臺作業一次

BackgroundJob.Enqueue(() => new MyJob().Execute(path)); 

這個工作應該只運行一次,但在門戶網站我看到了同時運行多個倍的處理工作的一部分。我如何防止這種情況發生,並確保工作只有一次被啓動?

+0

你的方法調用中使用屬性DisableConcurrentExecution,或者你可以進入jobinto數據庫爲定時循環作業有你把一個斷點在BackgroundJob.Enqueue上看看它是否被多次調用?那行代碼在哪裏? – Tom

+0

這是正確的語法,使火災和忘記呼叫。應該運行一次。 Execute方法做什麼? – Thorarins

+1

我在Azure網站上運行這個。代碼在啓動時只運行一次。如果應用池回收,似乎經常會發生,也許它會增加另一項工作。有沒有辦法可以檢查一份工作是否已經排隊或跑步,以防止進一步排隊? – Jules

回答

4

每次您打電話時,都會向數據庫添加另一項工作。如果您在啓動時遇到這種情況,並且您的應用程序頻繁重新啓動,則會導致您要報告的行爲。你可以通過的Hangfire.RecurringJob.AddOrUpdate代替BackgroundJob.Enqueue

0
var options = new BackgroundJobServerOptions { WorkerCount =1 }; 
      app.UseHangfireServer(options); 

我希望這將有助於你

+0

請問您可以添加更多的細節,爲什麼這將解決問題? – Adrian

+0

當多個線程同時訪問該方法時,該方法可能會多次調用! – Andy

+0

你可以參考這個:http://docs.hangfire.io/en/latest/background-processing/configuring-degree-of-parallelism.html – Andy