При переназначении Transaction.Current
я, похоже, теряю исходное TransactionScopeAsyncFlowOption
поведение моего TransactionScope
.Код после второго await
теряет значение Transaction.Current
.
Пример кода (Linqpad):
async Task Main()
{
Thread.CurrentThread.ManagedThreadId.Dump("before await");
var scope = new TransactionScope(TransactionScopeOption.Required, TransactionScopeAsyncFlowOption.Enabled);
var transaction = Transaction.Current;
await Task.Delay(1000).ConfigureAwait(false);
Thread.CurrentThread.ManagedThreadId.Dump("after first await");
Transaction.Current = transaction;
Transaction.Current.Dump(); // not null
await Task.Delay(1000).ConfigureAwait(false);
Thread.CurrentThread.ManagedThreadId.Dump("after second await");
Transaction.Current.Dump(); // is null :/
}
I знаю Я должен использовать using
вместо TransactionScope
вместо переназначения внешней транзакции, однако по причинам это сделать невозможно.Мне любопытно узнать причину поведения приведенного выше фрагмента и спрашивать, есть ли способы сохранить исходное поведение TransactionScopeAsyncFlowOption
.