Код неверен 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
.