Ich erhalte einen Fehler beim Versuch, einen Job in eine Sperranweisung zu stellen.Hangfire: Hintergrundjob innerhalb eines kritischen Abschnitts in die Warteschlange stellen
lock (lockObj)
{
BackgroundJob.Enqueue(() => MyJob());
}
Es beschwert sich, dass verteilte Transaktionen deaktiviert werden. Aber ich möchte nicht, dass meine Sperren Einfluss auf die Jobverarbeitung haben. Wenn ich MSDTC aktiviere, wird es die Sperre beibehalten, bis die Jobverarbeitung abgeschlossen ist? Es ist das Gegenteil von dem, was ich brauche.
Es ist nicht bequem BackgroundJob.Enqueue()
Anrufe außerhalb des Sperrblock zu bewegen, weil sie in einem anderen Verfahren sein könnte, die es schwer zu extrahieren (realen Fällen viel schwieriger) macht:
lock (lockObj)
{
MainWork();
AnotherMethod();
MoreWork();
}
private void AnotherMethod()
{
BackgroundJob.Enqueue(() => MyJob());
SomeWork();
}
Könnte jemand bitte Refactoring vorschlagen/Lösung brauche ich hier?
Nein, Sperre würde nach dem Einreihen freigegeben werden, nicht nach Abschluss des Auftrags – VMAtm