Csharp/C#教程:是否可以在异步中提交/回滚SqlTransaction?分享


是否可以在异步中提交/回滚SqlTransaction?

我正在尝试在异步中提交/回滚SqlTransaction 。 但它似乎不支持异步。 有没有办法让它成为异步而不使用原始SQL来启动事务?

看起来不像。 通过相关代码,所有其他方法都是异步通过(同步版本是特殊情况),而SqlTransaction和其他相关代码只是同步。 对于重叠的部分, SqlTransaction只是同步等待任务完成(例如,处理重新连接时)。

实际上,当您深入了解代码时,事务操作显式禁止任何异步操作,因此不包括异步事务操作似乎是设计使然。 如果您确实找到了一种解决方法,请记住这一点 – 系统不是为了允许并发操作而设计的,因此一旦您获得(任何)任务,请始终使用await

如果你想绕过这个,你必须一直深入到为SQL Server创建二进制消息(或者至少使用reflection来执行一些内部帮助器方法),这不是全部太容易了(当然,它需要您访问SqlConnection使用的内部TCP连接 – 并处理重新连接等)。

查看EntityFramework代码,他们的解决方案非常简单 – 他们只需调用Commit 。 这并不像它听起来那么疯狂 – 工作的主要部分是在ExecuteXXXAsync方法本身完成, Commit是“免费的” – 它只需要与服务器进行通信,这通常不会太昂贵。

鉴于这些限制,您的性能仍然不会受到明显影响 – 如果您有一些并发Commit ,您的线程池可能必须分配一个或两个线程,但替代方案会更加痛苦。

上述就是C#学习教程:是否可以在异步中提交/回滚SqlTransaction?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { . . . } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/984054.html

(0)
上一篇 2021年12月19日
下一篇 2021年12月19日

精彩推荐