异步提交或回滚事务范围

Fré*_*ric 47 .net c# transactionscope async-await

众所周知,在.Net中引入模式TransactionScope时会被遗忘async await.如果我们试图await在事务范围内使用某些调用,它们就会被破坏.

现在,由于范围构造函数选项,这已得到修复.

但它看起来仍然有一个缺失的部分,至少我无法找到如何以简单的"事务范围"方式做到这一点:如何等待提交或回滚范围?

提交和回滚也是IO操作,它们应该是等待的.但由于它们发生在范围处理上,我们将不得不等待处置.这看起来并不可行(using模式也不实用).

我也看了一下System.Transactions.Transaction界面:那里也没有等待的方法.

我知道提交和回滚几乎只是向数据库发送一个标志,所以它应该很快.但是对于分布式事务,这可能会更快.无论如何,这仍然是一些阻止IO.

关于分布式案例,请记住这可能会触发两阶段提交.在某些情况下,在第一阶段(准备)期间会招募额外的耐用资源.然后通常意味着针对那些最近登记的资源发布了一些额外的查询.提交期间发生的所有事情.

那么有没有办法等待交易范围?或者System.Transactions.Transaction相反?

注意:我不认为这是" 可以在异步中提交/回滚SqlTransaction吗? " 的副本.SqlTransaction比系统事务更有限.它们只能处理SQL-Server,并且永远不会分发.其他一些事务确实有异步方法,例如Npgsql.现在,对于事务范围/系统事务具有异步方法,DbTransaction可能需要具有异步方法.(我不知道系统事务的内部,但它可能使用这个ADO.NET契约.我们将连接到系统事务的方式让我觉得它不会使用它.)

Gle*_*leb 6

到目前为止还没有办法实现它。但他们正在努力