我有一個hangfire服務器正在運行。 我創建了一個後臺作業如下Hangfire只運行後臺作業一次
BackgroundJob.Enqueue(() => new MyJob().Execute(path));
這個工作應該只運行一次,但在門戶網站我看到了同時運行多個倍的處理工作的一部分。我如何防止這種情況發生,並確保工作只有一次被啓動?
我有一個hangfire服務器正在運行。 我創建了一個後臺作業如下Hangfire只運行後臺作業一次
BackgroundJob.Enqueue(() => new MyJob().Execute(path));
這個工作應該只運行一次,但在門戶網站我看到了同時運行多個倍的處理工作的一部分。我如何防止這種情況發生,並確保工作只有一次被啓動?
每次您打電話時,都會向數據庫添加另一項工作。如果您在啓動時遇到這種情況,並且您的應用程序頻繁重新啓動,則會導致您要報告的行爲。你可以通過的Hangfire.RecurringJob.AddOrUpdate
代替BackgroundJob.Enqueue
你的方法調用中使用屬性
DisableConcurrentExecution
,或者你可以進入jobinto數據庫爲定時循環作業有你把一個斷點在BackgroundJob.Enqueue上看看它是否被多次調用?那行代碼在哪裏? – Tom這是正確的語法,使火災和忘記呼叫。應該運行一次。 Execute方法做什麼? – Thorarins
我在Azure網站上運行這個。代碼在啓動時只運行一次。如果應用池回收,似乎經常會發生,也許它會增加另一項工作。有沒有辦法可以檢查一份工作是否已經排隊或跑步,以防止進一步排隊? – Jules