Код, который у вас есть, создаст условия гонки. Вы почти сразу же вызовете scope.complete до того, как завершатся ваши темы.
Однако, даже если каждый работник создает область транзакции, они фактически вкладываются .Net в область транзакции верхнего уровня, если вообще создается новая.
Если вы хотите иметь вложенную многоуровневую транзакцию, возможно, вы захотите создать новую область с помощью ScopeOption.RequiresNew
. Но это ответ на реальный вопрос, поэтому вы бы хотели это сделать. Транзакции по своей сути означают, что ваша работа в некотором роде является последовательной или критической, чтобы происходить в определенном порядке. Если вы можете распараллелить работу, тогда попытайтесь делать это в отдельных транзакциях, где это возможно, ограничьте область действия до как можно более короткого промежутка времени, чтобы предотвратить блокировку и т. Д.