[英]Static Hangfire RecurringJob methods in LINQPad are not behaving
我在 LINQPad 中有一個如下所示的腳本:
var serverMode = EnvironmentType.EWPROD;
var jobToSchedule = JobType.ABC;
var hangfireCs = GetConnectionString(serverMode);
JobStorage.Current = new SqlServerStorage(hangfireCs);
Action<string, string, XElement> createOrReplaceJob =
(jobName, cronExpression, inputPackage) =>
{
RecurringJob.RemoveIfExists(jobName);
RecurringJob.AddOrUpdate(
jobName,
() => new BTR.Evolution.Hangfire.Schedulers.JobInvoker().Invoke(
jobName,
inputPackage,
null,
JobCancellationToken.Null),
cronExpression, TimeZoneInfo.Local);
};
// psuedo code to prepare inputPackage for client ABC...
createOrReplaceJob("ABC.CustomReport.SurveyResults", "0 2 * * *", inputPackage);
JobStorage.Current.GetConnection().GetRecurringJobs().Where( j => j.Id.StartsWith( jobToSchedule.ToString() ) ).Dump( "Scheduled Jobs" );
我必須同時安排 QA 和 PROD。 為此,我切換serverMode
變量並為EWQA
運行一次,為EWPROD
運行一次。 直到最近,這一切都運行良好,不幸的是,我不確切知道它是什么時候發生變化的,因為我不必總是在兩種環境中運行。
我兩天前確實購買/安裝了 LINQPad 7,以查看一些 C# 10 功能,但我不確定這是否會影響它。
但這是問題/流程:
EWQA
運行它,一切正常。EWPROD
運行它,腳本(Hangfire 組件)似乎在 QA 和 PROD 的混合體中運行。 當我在EWPROD
中“第二次”運行它時,我已經確認:
hangfireCs
(連接字符串)是正確的(指向PROD),它被分配給JobStorage.Current
JobStorage.Current.GetConnection().GetRecurringJobs()
使用正確的連接。createOrReplaceJob
操作中的RecurringJob.*
方法使用上一次運行的連接(即EWQA
)。 如果我監控我的 QA Hangfire 數據庫,我會看到刪除和添加的作業。臨時解決方法:
EWQA
運行它,一切正常。EWPROD
運行它,現在一切正常。 所以我不知道問題出在哪里。 我覺得我的 LINQPad7 升級/安裝可能會導致問題,但我不確定是否有其他方法可以使RecurringJob.*
static 方法使用“更新的”連接字符串。
關於為什么現在需要重新啟動或重置的任何想法?
LINQPad - 5.44.02 Hangfire.Core - 1.7.17 Hangfire.SqlServer - 1.7.17
這是由您的腳本(或您調用的庫)靜態緩存某些內容而不是在執行之間進行清理引起的。
完成后清除/處置對象(例如,JobStorage.Current?),或者通過添加Util.NewProcess=true;
到你的腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.