gpt4 book ai didi

.net - DbConnection.Open() 有效,但 dbConnection.OpenAsync() 无效

转载 作者:行者123 更新时间:2023-12-01 12:34:28 25 4
gpt4 key购买 nike

这是一个艰难的过程。使用完全相同的查询字符串,完全相同的以下代码:

using (var db = new SqlConnection(queryString))
{
await db.OpenAsync();
var results = await db.ExecuteSomethingAsync...;
db.Close();
{

从 Windows 应用程序运行时会起作用。但是,当从 IIS Express 或 IIS 7 运行时,它将永远卡在 await OpenAsync() 中。如果我用 db.Open() 替换该行,它仍然可以工作。有什么建议吗?

最佳答案

await 在 ASP.NET 中需要谨慎对待,因为同步上下文想要序列化单个请求的工作。您发布的代码本身可能没问题 - await 不会阻塞。但是,我希望为此调用链中的某处调用 .Wait() 或访问 .Result,而不是 await

这里有几个选项:

  • 不要使用 .Wait().Result(或类似的)根本 - 相反,只使用 await 并使其成为适当的异步操作
  • 或者,使用 .ConfigureAwait(false) 告诉它忽略同步上下文;不幸的是,这需要添加到所有await的地方,即

    await db.OpenAsync().ConfigureAwait(false);
    var results = await db.ExecuteSomethingAsync(...).ConfigureAwait(false);
  • 或者,只使用同步代码 - 在大多数情况下,sql 将非常运行 - 所以将它推到异步不一定帮助尽可能多你可能认为;显然,这可能因用法而异;但这里要牢记的一个关键点是 ASP.NET 本身已经是线程化的——这并不是说整个服务器在这里都停止了

关于.net - DbConnection.Open() 有效,但 dbConnection.OpenAsync() 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com