是否可以在异步中提交/回滚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