我正在处理的应用程序使用多个短期数据库调用来读取和更新数据。一个调用的输出正由另一个调用使用。
在这种情况下,对每个数据库调用使用 await 是否会导致吞吐量增加?
应用程序和数据库是单独托管的。
构建的概念验证实际上降低了吞吐量,我推测这是因为上下文切换的开销。
同步版本提供大约 8 个频率/秒,而异步版本仅提供 2.5 个频率/秒。
我已经确保 httpTargetRuntime 设置为 4.5.2,使用 aync 并一直等待到 asmx 服务,该服务使用 APM 样式端点,如记录 https://learn.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/interop-with-other-asynchronous-patterns-and-types#ApmToTap
我正在使用 ADO.NET 异步版本方法,并在连接字符串中设置了异步处理 = True。
- 异步等待是否应该被认为非常适合短 oltp 事务?
- 如果上述情况是由于死锁,如何进行故障排除。我们已经对代码进行了审查,除了上面链接中提到的那个之外,没有观察到任何直接从任务中使用
.Result
的地方。
否,因为您没有并行访问它们。Async 和 Await 只是将上下文返回给调用方,从而使主线程不必等待。但是需要完成相同数量的工作量,无论有没有 Async Await,并且等待每次调用将结果传递给下一个调用(加上上下文切换(。
我建议重写逻辑,以便能够仅调用对数据库的一个请求,例如,如有必要,请创建一个存储过程。