小编Tho*_*sDC的帖子

在异步/等待代码中重新分配 Transaction.Current 时上下文丢失

重新分配时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 :/
}

Run Code Online (Sandbox Code Playgroud)

知道我应该使用using语句TransactionScope而不是重新分配环境事务,但是由于原因,这是不可能的。我很好奇上面代码片段行为的原因,想知道是否有办法保持原始TransactionScopeAsyncFlowOption行为。

.net c# transactionscope async-await rebus

5
推荐指数
1
解决办法
232
查看次数

标签 统计

.net ×1

async-await ×1

c# ×1

rebus ×1

transactionscope ×1