gpt4 book ai didi

c# - 是否可以异步提交/回滚 SqlTransaction?

转载 作者:可可西里 更新时间:2023-11-01 09:08:02 24 4
gpt4 key购买 nike

我正在尝试以异步方式提交/回滚 SqlTransaction。但看起来不支持异步。有什么方法可以在不使用原始 SQL 启动事务的情况下使其异步?

最佳答案

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

事实上,当您深入了解代码时,事务操作明确禁止任何异步操作,因此不包括异步事务操作似乎是设计使然。如果您确实找到了解决方法,请牢记这一点 - 系统并非设计为允许并发操作,因此始终一旦获得(无论)任务就使用await回来。

如果你想解决这个问题,你必须一直深入到直接为 SQL Server 创建二进制消息(或者至少使用反射来执行一些内部辅助方法),这是行不通的太简单了(当然,它需要您访问 SqlConnection 使用的内部 TCP 连接,并处理重新连接等)。

查看 EntityFramework 代码,他们的解决方案非常简单 - 他们只需调用 Commit。这并不像听起来那么疯狂 - 首当其冲的工作是在 ExecuteXXXAsync 方法本身中完成的,Commit 是“免费的” - 它只会让你付出代价与服务器通信,这通常不会太昂贵。

考虑到这些限制,您的性能仍然不会受到明显影响 - 如果您有一些并发的 Commit,您的线程池可能必须分配一个或两个超过通常数量的线程,但替代方案要痛苦得多。

关于c# - 是否可以异步提交/回滚 SqlTransaction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152954/

24 4 0