Почему VS2017 говорит, что ожидание - это неизвестное ключевое слово? - PullRequest
1 голос
/ 18 марта 2020
    internal /*async*/ void RunAsync()
    {
        var tasks = ...;
        await Task.WhenAll(tasks);
    }

В приведенном выше примере среда IDE сообщает мне, что оператор '' 'await может использоваться только в методе asyn c ". Он предлагает исправления для создания сигнатуры метода async void или async Task

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

. Во втором примере выдается ошибка "тип или пространство имен не может быть найдено" ... await не обозначается цветом как ключевое слово языка, и среда IDE не предлагает автоматических исправлений c.

Это ошибка VS?

1 Ответ

2 голосов
/ 18 марта 2020

Код неверен C# код в обоих случаях. Поэтому компилятор / IDE должен приложить все усилия, чтобы выяснить, что вы пытаетесь сделать , и выдать соответствующее сообщение об ошибке.

В приведенном выше примере IDE сообщает мне, что оператор '' await 'может использоваться только в методе asyn c ". Он предлагает мне исправления, чтобы сделать мою сигнатуру метода asyn c void или asyn c Task

VS анализирует код и почти уверен, что await здесь предназначен для await оператор. Код недействителен C#, но похоже, что вы пытаетесь это сделать. Таким образом, он дает вам полезное предположение, что вам нужно иметь ключевое слово async, чтобы сделать ключевое слово await.

Во втором примере выдается ошибка «тип или пространство имен, ожидаемые не могут быть найденным "... await не имеет цветовой кодировки как ключевое слово языка, и IDE не предлагает мне автоматических c исправлений.

VS выполняет синтаксический анализ кода и не уверен, является ли await здесь await оператор или тип. await t; очень похоже на int t; для компилятора.

Это ошибка VS?

Это не ошибка, так как код неверен C# начать с. Но вы можете запросить более качественное сообщение об ошибке во втором случае, и команда компиляторов C# может решить, а может и не решить, стоит ли это делать вместо того, чтобы работать с другими функциями.

Для контекста, обратите внимание, что await является контекстным ключевым словом . Это только ключевое слово, если присутствует ключевое слово async. await - это , а не всегда ключевое слово, и было бы ошибкой, если бы VS всегда рассматривал его как ключевое слово. В частности, в обоих примерах кода await не является ключевым словом. VS делает все возможное для дополнительного резервного анализа в первом примере, чтобы обнаружить общий сценарий, когда разработчик намеревался использовать ключевое слово await.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...