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

时间:2018-02-06 13:37:47

标签: c# .net-core visual-studio-mac

发生了一些非常奇怪的事情。如果我在一行代码之后放置一个断点,那么在调试时,调试会话就会停止,好像我点击了" Stop"按钮。
真正奇怪的是,如果我完全跳过这个功能,跳过它,代码不会崩溃......

我在使用C#7.1

在任何VS(Windows和Mac)上使用.Net Core 2,在完全更新的VS For Mac中运行

继承人代码:

        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();
            }
        }

EDIT1:
使用.Open(),没有异步,完美运行。但问题转移到r1.ReadAsync()行......

EDIT2:
在该代码之前,以下代码完美运行

    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;
    }

EDIT3:
同样可以在VS 2017上完全更新。

EDIT4:
显然await语句有问题。我发现代码将在随后的第一个await中崩溃,无论它在哪里

1 个答案:

答案 0 :(得分:1)

我有点想通了......我正在使用Task.StartNew跨越新线程。更改为Task.Run之后,事情开始正常运行。无法弄清楚调试会话崩溃的原因......由于代码按预期工作,我接受这个作为答案。