Glimpse ADO" ExecuteReaderAsync()"没有回应

时间:2015-02-17 06:29:10

标签: c# .net ado.net async-await glimpse

使用Glimpse时,ADO ExecuteReaderAsync()没有永久返回任何回复:

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异步并等待查询结果异步。

但是cmd.ExecuteReaderAsync().Result并没有永久地回复任何回复 等待超过10分钟,但不会发生超时。 我在VisualStudio上暂停调试,调试语句打开 var result = cmd.ExecuteReaderAsync().Result;

我认为......这种问题是由异步造成的 你知道为什么和哪里的反应消失了吗?
谢谢你的帮助 !

使用:

.Net Framework 4.5.2
Glimpse.Core 1.8.6
一瞥ADO 1.7.3
SQL Server 2008 R2

1 个答案:

答案 0 :(得分:4)

此:

var result = cmd.ExecuteReaderAsync().Result;

导致您的代码死锁。我假设您正在运行一个传递同步上下文(UI,ASP.NET,Universal App等)的应用程序。这就是你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 foreverdeadlock even after using ConfigureAwait(false) in Asp.Net flow了解更多信息。