发生了一些奇怪的事情。如果我在某行代码后面设置断点,在调试时,调试会停止,就好像我按下了“停止”按钮。
真正奇怪的是,如果我完全跳过该函数,跳过它,代码就不会崩溃...
我正在使用 .Net Core 2,在任何 VS 上(Windows 和 Mac)运行,使用 C# 7.1
以下是代码:
var connectionToUse = new SqlConnection(string.Format(str, dbName));
try
{
SqlCommand command = new SqlCommand();
command.Connection = connectionToUse;
command.CommandText = @"SELECT * from myTable";
await connectionToUse.OpenAsync(); //CANT GET PAST THIS LINE HERE
var r1 = await command.ExecuteReaderAsync();
while (await r1.ReadAsync())
{
//MORE CODE
}
r1.Close();
await Task.Delay(15000);
}
catch (Exception ex)
{
//NEVER ENTERS HERE
}
finally
{
if (connectionToUse.State != ConnectionState.Closed)
{
connectionToUse.Close();
}
}
编辑1:
使用.Open()
,不使用异步,效果完美。但问题转移到了r1.ReadAsync()
这一行……
编辑2:
在那段代码之前,以下代码可以正常运行
private async Task<Dictionary<int, string>> MapDatabases()
{
Dictionary<int, string> databases = new Dictionary<int, string>();
SqlConnection mainConn = new SqlConnection(string.Format(str, "Master"));
SqlCommand command = new SqlCommand();
command.CommandText = "SELECT name,database_id FROM sys.databases WHERE database_id = 5";
command.Connection = mainConn;
try
{
await mainConn.OpenAsync();
SqlDataReader reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
databases.Add(reader.GetInt32(1), reader.GetString(0));
}
reader.Close();
mainConn.Close();
}
finally
{
if (mainConn.State != ConnectionState.Closed)
{
mainConn.Close();
}
}
return databases;
}
编辑3:在完全更新的VS 2017上也可以重现该问题。 编辑4:
显然
await
语句出现了问题。我发现代码将崩溃在第一个后续的await
,无论它在哪里。