繁体   English   中英

为什么 VS2017 说 await 是一个未知的关键字?

[英]Why does VS2017 say await is an unknown keyword?

    internal /*async*/ void RunAsync()
    {
        var tasks = ...;
        await Task.WhenAll(tasks);
    }

在上面的示例中,IDE 通知我“''await 运算符只能在异步方法中使用”。 它为我提供了使我的方法签名async voidasync Task修复程序

    internal /*async*/ void RunAsync()
    {
        var tasks = ...;
        var t = Task.WhenAll(tasks);
        await t;
    }

在第二个示例中,它给出了错误“找不到类型或命名空间 await”... await没有作为语言关键字进行颜色编码,IDE 没有提供自动修复。

这是一个VS错误吗?

在这两种情况下,代码都是无效的 C# 代码。 所以编译器/ IDE已经尽力找出你正在试图做的,给你相应的错误信息是什么。

在上面的示例中,IDE 通知我“''await 运算符只能在异步方法中使用”。 它为我提供了使我的方法签名 async void 或 async Task 的修复程序

VS 正在解析代码,并且非常确定这里的await旨在成为await运算符。 该代码不是有效的 C#,但这就是您要尝试执行的操作。 因此,它为您提供了一个有用的建议,即您必须使用async关键字才能使await成为关键字。

在第二个示例中,它给出了错误“找不到类型或命名空间 await”...await 没有作为语言关键字进行颜色编码,IDE 没有提供自动修复。

VS 正在解析代码,不确定这里的awaitawait运算符还是类型。 await t; 看起来很像int t; 到编译器。

这是一个VS错误吗?

这不是错误,因为代码一开始就是无效的 C#。 但是在第二种情况下,您可以要求提供更好的错误消息,C# 编译器团队可能会也可能不会决定这样做而不是处理其他功能是值得的。

对于上下文,请注意await上下文关键字 如果存在async关键字,它只是一个关键字。 await并不总是一个关键字,如果 VS 总是把它当作一个关键字,那将是一个错误。 具体来说,在这里的两个代码示例中, await都不是关键字。 VS 在第一个示例中不遗余力地进行额外的回退解析,以检测开发人员打算使用await关键字的常见场景。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM