Я получаю сообщение об ошибке при попытке поставить задание в очередь в операторе блокировки.
lock (lockObj)
{
BackgroundJob.Enqueue(() => MyJob());
}
Он жалуется на отключение распределенных транзакций. Но я не хочу, чтобы мои блокировки влияли на обработку заданий. Если я включу MSDTC, будет ли он удерживать блокировку до завершения обработки задания? Это противоположно тому, что мне нужно.
Неудобно перемещать вызовы BackgroundJob.Enqueue()
за пределы блока блокировки, потому что они могут находиться внутри другого метода, что затрудняет извлечение (реальные случаи намного сложнее):
lock (lockObj)
{
MainWork();
AnotherMethod();
MoreWork();
}
private void AnotherMethod()
{
BackgroundJob.Enqueue(() => MyJob());
SomeWork();
}
Может ли кто-нибудь предложить рефакторинг/решение, которое мне нужно здесь?