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

这是我的代码:

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相关问答推荐

PowerShell 5.1和7在使用证书时的区别

.Net MAUI Android 无法与 API localhost 对话

将日期时间转换为日期格式 dd/mm/yyyy

正则表达式在空格上拆分,除非在引号中

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

异步总是 WaitingForActivation

Style 和 ControlTemplate 的区别

如何以编程方式判断类型是 struct 还是类?

为什么我得到 411 Length required 错误?

如何防止和/或处理 StackOverflowException?

如何在 C# 4.0 中使任务进入睡眠状态(或延迟)?

隐式与显式接口实现

Mono 是树莓派

如何比较 C# 中的(目录)路径?

监听依赖属性的变化

哪个密码字符在 winforms 文本框中显示黑点 (•)?

无锁多线程适用于真正的线程专家

忽略 LINQ to XML 中的命名空间

obj 文件夹是为了什么而生成的?

Roslyn 编译代码失败