当我运行时:
using(SqlConnection connection = new SqlConnection(connectionString)){
await connection.OpenAsync();
}
它挂在connection.OpenAsync()
行。
如果我在Sql Server Management Studio中查看数据库有多少个活动连接,那么只有一个:可能是此代码使用的连接。所以,我不确定我是否正在从应用程序池中耗尽连接。
我做错了什么?
答案 0 :(得分:12)
问题不在于连接。问题是我在自己的脚上开枪自杀了。我试图调用包含connection.OpenAsync()
行的方法进行同步调用,如下所示:
Task task = MyAsyncMethod();
task.Wait();
通过调用task.Wait()
我阻止了线程。当await connection.OpenAsync()
返回时,方法的其余部分想要在我刚刚阻止的同一个线程上运行,因此任务永远不会完成,task.Wait()
永远不会返回。
解决方案:
因为在我的异步方法中,我没有要求我坚持使用调用它的同一个线程,我只是使用await connection.OpenAsync().ConfigureAwait(false)
,使它在不同的线程中运行方法的其余部分而不是我阻塞的线程{ {1}}。
答案 1 :(得分:1)