簡體   English   中英

Hangfire 重復性作業 - 如何動態更改間隔

[英]Hangfire recurring jobs - how to dynamically change the interval

我有一個 .NET Web 應用程序,它使用 Hangfire 進行一些重復性工作。 我想構建功能,以便用戶可以通過應用程序更改作業的間隔。 但似乎“更新”不起作用。

我已將 Startup.cs 配置為在應用程序運行時啟動作業:

public void Configuration(IAppBuilder app)
{
    app.UseHangfireAspNet(GetHangfireServers);

    //Admin user can view job dashboard
    app.UseHangfireDashboard("/jobs", new DashboardOptions
    {
        Authorization = new[] { new JobsAuthorizationFilter() }
    });

    app.UseHangfireServer();

          
    RecurringJob.AddOrUpdate("my-job-id", () => FileProcess.GetOrders(), interval); //interval is a parameter and its initial values is * * * * * which sets the job to run every minute
}

現在在控制器中,當用戶單擊更新按鈕時將調用此方法。

public ActionResult JobUpdate(string newInterval)
{
     var manager = new RecurringJobManager();
     manager.  RecurringJob.AddOrUpdate("my-job-id", () => FileProcess.GetOrders(), newInterval);           

     return new EmptyResult();
}

但似乎這份工作沒有得到更新。 我已經仔細檢查了 Hangfire.Hash 表,這項工作的 Cron 值根本沒有改變。

我也嘗試刪除作業然后將其添加回來,也不起作用

public ActionResult JobUpdate(string newInterval)
{
     var manager = new RecurringJobManager();
     manager.RemoveIfExists("my-job-id");
     manager.AddOrUpdate("my-job-id", () => FileProcess.GetOrders(), newInterval);   
     manager.Trigger("my-job-id");
}    

我錯過了什么? 如何獲得用戶設置和更新的時間間隔?

事實證明,導致我的方法未被更新的問題是“間隔”參數。 因為我使用緩存來緩存這個值,所以舊值只會在一定時間后過期。 這就是它不更新的原因。 我刪除了緩存,現在一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM