[英]Why does VS2017 say await is an unknown keyword?
internal /*async*/ void RunAsync()
{
var tasks = ...;
await Task.WhenAll(tasks);
}
在上面的示例中,IDE 通知我“''await 運算符只能在異步方法中使用”。 它為我提供了使我的方法簽名async void
或async 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 正在解析代碼,不確定這里的await
是await
運算符還是類型。 await t;
看起來很像int t;
到編譯器。
這是一個VS錯誤嗎?
這不是錯誤,因為代碼一開始就是無效的 C#。 但是在第二種情況下,您可以要求提供更好的錯誤消息,C# 編譯器團隊可能會也可能不會決定這樣做而不是處理其他功能是值得的。
對於上下文,請注意await
是上下文關鍵字。 如果存在async
關鍵字,它只是一個關鍵字。 await
並不總是一個關鍵字,如果 VS 總是把它當作一個關鍵字,那將是一個錯誤。 具體來說,在這里的兩個代碼示例中, await
都不是關鍵字。 VS 在第一個示例中不遺余力地進行額外的回退解析,以檢測開發人員打算使用await
關鍵字的常見場景。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.