C# .Net Core-调试时应用程序崩溃

C# .Net Core-调试时应用程序崩溃,c#,.net-core,visual-studio-mac,C#,.net Core,Visual Studio Mac,发生了一些非常奇怪的事情。如果在某一行代码后放置断点,调试时,调试会话将停止,就像我按下停止按钮一样。 真正奇怪的是,如果我完全跳过这个函数,跳过它,代码就不会崩溃 我使用的是.Net Core 2,在任何VS windows和Mac上运行完全更新的VS For Mac,使用的是C 7.1 代码如下: var connectionToUse = new SqlConnection(string.Format(str, dbName)); try {

发生了一些非常奇怪的事情。如果在某一行代码后放置断点,调试时,调试会话将停止,就像我按下停止按钮一样。 真正奇怪的是,如果我完全跳过这个函数,跳过它,代码就不会崩溃

我使用的是.Net Core 2,在任何VS windows和Mac上运行完全更新的VS For 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:
显然等待声明有问题。我发现代码将在随后的第一次等待中崩溃,无论它在哪里

我有点明白了。。。我正在使用Task.StartNew跨越新线程。更改为“任务”后,“运行”开始正常工作。无法找出调试会话为何崩溃。。。由于代码按预期工作,我接受这个答案。

数据库存在吗?调试代码时,是否使用了相关appsettings.json文件中的连接字符串,与未调试运行代码时使用的连接字符串相同?@JamieTaylor是的,如果不使用异步版本,则数据库存在,代码按预期工作。可能是调试程序错误。我将在上报告它,并附加IDE日志和调试器输出。另外,如果可能的话,一个小的复制项目也会很有用。@MattWard damn,这也发生在VS 2017 for windows上……StartNew使用当前的同步上下文,因此您的工作可能最终会在UI线程上运行,更多信息如下: