我有一个相当奇怪的问题正在发生.

这是我的代码:

private async Task BreakExpectedLogic()
{
    bool test = false;
    if (test == true)
    {
        Console.WriteLine("Hello!");
        throw new Exception("BAD HASH!");
    }
}

看起来很简单,不应该达到Console.WriteLinethrow.

如果我将throw移到它自己的方法中,那么它工作得很好.我的问题是,它怎么会无视挡路的if,打到了throw new Exception:

Here is some evidence

EDIT 1:我已经更新了我的代码以包含签名,我已经删除了所有与此问题无关的内容并运行了它,它仍然会发生.

推荐答案

这似乎是async方法中的错误,代码is not实际执行,但调试器步骤到throw语句行.如果在ifthrow语句之前存在一些代码行,则忽略这些行,将调试器步骤only调到具有throw语句的行.

此外,如果不使用变量-if (false)if (true == false),则调试器会将步骤移到正确的代码行,然后移到右大括号.

此错误已由@Matthew Watson人发布到Visual Studio团队(链接现在不可用).

此外,请参见类似的问题-Condition check in async method

EDIT (2017-10-06):

在VS 2017 15.3.5中,不能使用复制版本.Net框架4.7.似乎VS团队已经解决了这个问题.

.net相关问答推荐

.NET模拟具有泛型返回类型的方法

out 和 ref 可以用作临时变量吗?

LINQ:确定两个序列是否包含完全相同的元素

添加新实体标量时实体框架 4 映射片段错误

托管和非托管代码、内存和大小有什么区别?

什么是编组?当某些东西被编组时会发生什么?

您可以在 C# 代码中捕获本机异常吗?

.NET 事件 - 什么是对象发送者和 EventArgs e?

如何在 WebBrowser 控件中注入 Javascript?

如何仅在需要时提升权限?

.NET 配置文件 configSource 在应用程序目录文件夹之外

List 是否保证项目将按照添加的顺序返回?

立即检测客户端与服务器套接字的断开连接

EF Core 添加迁移构建失败

如何将整个字符串与正则表达式匹配?

在 .Net 中调用 Web 服务时绕过无效的 SSL 证书错误

泛型类的默认构造函数的语法是什么?

表单不响应 KeyDown 事件

如何为 Dapper 查询动态创建参数

如何使用 XmlSerializer 将字符串序列化为 CDATA?