报错:Nested transactions are not supported
使用多线程task事务嵌套会报错,解决方案是TransactionScopeAsyncFlowOption
的参数设置为Enabled。
官网是最详细的文档TransactionScope 类 (System.Transactions) | Microsoft Docs
new TransactionScope(TransactionScopeOption.Required,TransactionScopeAsyncFlowOption.Enabled)
Enabled | 1 | 指定跨线程连续任务的事务流已启用。 |
Suppress | 0 | 指定跨线程连续任务的事务流已禁用。 如果 TransactionScope 构造函数中未指定 |
注解
TransactionScopeAsyncFlowOption
在采用TransactionScopeAsyncFlowOption
参数的TransactionScope.TransactionScope重载中配置。 Suppress
如果未 TransactionScopeAsyncFlowOption
指定,则为默认设置。
using (var scope = new TransactionScope())
{
using (var scope2 = new TransactionScope(TransactionScopeOption.Required, TransactionScopeAsyncFlowOption.Enabled))
{
var action= Task.Run<OperationResult>(() =>
{
xxx
});
action.wait();
scope2.Complete();
}
scope.Complete();
}