瞥见ADO"ExecuteReaderAsync()"没有响应

Glimpse ADO "ExecuteReaderAsync()" does not respond

使用 Glimpse ADO 时 ExecuteReaderAsync() 永远 return 没有任何响应:

var factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient");
var conn = factory.CreateConnection();
conn.ConnectionString = "YourConnectionString";
conn.Open();

var cmd = conn.CreateCommand();
cmd.CommandText = "Select 1";                 // Correct SQL is not required. If use SQL "Foo" brings same result.

var result = cmd.ExecuteReaderAsync().Result; // NG. Responce did not return forever.
// var result = cmd.ExecuteReader();          // OK. Responce is return soon.

我使用 GlimpseAdo,所以 factory.CreateConnection() 创建了一个 GlimpseDbConnection 的实例。 然后我通过 GlimpseDbCommand 执行 SQL async 并等待查询结果 async.

但是cmd.ExecuteReaderAsync().Result一直没有return任何回应。
等待超过10分钟,但没有超时。 我在 VisualStudio 上暂停调试,调试语句打开 var result = cmd.ExecuteReaderAsync().Result;.

我认为...这个问题是由异步引起的。
您知道响应消失的原因和位置吗?

谢谢你的帮助 !

使用:

.Net Framework 4.5.2
Glimpse.Core1.8.6
一瞥ADO 1.7.3
SQL 服务器 2008 R2

这个:

var result = cmd.ExecuteReaderAsync().Result;

导致您的代码死锁。我假设您是 运行 一个传递同步上下文的应用程序(UI、ASP.NET、通用应用程序等)。这就是为什么你 shouldn't block on async code

要解决此问题,您必须制定方法 async Task 并使用 await 而不是 .Result:

var result = await cmd.ExecuteReaderAsync();

您还可以查看 Trying to call Async method synchronously. It waits on Task.Result forever and deadlock even after using ConfigureAwait(false) in Asp.Net flow 了解更多信息。