2017-02-16 117 views
2

如果嘗試在鎖定語句中排列作業,會出現錯誤。Hangfire:將關鍵部分內的後臺作業排入隊列

lock (lockObj) 
{ 
    BackgroundJob.Enqueue(() => MyJob()); 
} 

它抱怨分佈式交易被禁用。但我不希望我的鎖對作業處理產生影響。如果我啓用MSDTC,它會保持鎖定,直到作業處理完成爲止?這與我所需要的相反。

這是不方便移動的鎖塊外BackgroundJob.Enqueue()電話,因爲這可能是裏面的另一種方法,這使得它很難提取(實際情況要困難得多):

lock (lockObj) 
{ 
    MainWork(); 
    AnotherMethod(); 
    MoreWork(); 
} 

private void AnotherMethod() 
{ 
    BackgroundJob.Enqueue(() => MyJob()); 
    SomeWork(); 
} 

任何人都可以請建議重構/解決方案我需要在這裏?

+1

不,鎖將被釋放入隊後,完成作業後不 – VMAtm

回答

2

發現問題不是因爲鎖定,而是因爲使用了TransactionScope。所以接下來的代碼做的伎倆:

private void AnotherMethod() 
{ 
    using (var ts = new TransactionScope(TransactionScopeOption.Suppress)) 
    { 
     BackgroundJob.Enqueue(() => MyJob()); 
     ts.Complete(); 
    } 

    SomeWork(); 
}