![](/img/trans.png)
[英]c# async await strange warning CS1998: This async method lacks 'await' operators
[英]What is the reason behind CS1998 “method lacks await operators”
當async
方法缺少任何await
運算符時,C#編譯器會生成CS1998警告。
警告背后的原因是什么?
我知道async
通過添加狀態機和異常處理在方法中引入了開銷。
警告性能的主要原因是什么? 或者有理由通知我,我可能已經忘記了await
某個地方?
也許來自語言設計團隊的人可以對這一個有所了解...... :)
(請:不要發布說“你可以刪除async
以使警告消失”的答案。我想知道警告背后的原因和決定,而不是解決問題的方法。)
警告背后的原因是什么?
簡單地說,一個不使用await
的async
方法幾乎肯定是錯誤的。 並非總是錯誤,否則這將是一個錯誤。 但幾乎總是錯的,因此警告。
一個非常常見的異步 - 新手錯誤是假設async
意味着“使這個方法異步”。 這通常與“異步”意味着“在后台線程上運行”的假設配對,但有時它只是“魔術”的假設。
因此,警告明確指出代碼將同步運行。
我還發現這個重構自己的代碼時警告有益的-有時我結束了一個async
應改為同步方式方法,和此警告點了這一點。
如果你有非平凡的(即可能是異常生成的)同步代碼並且需要實現異步方法簽名,那么沒有await
async
可能對減少代碼很有用。 在這種情況下,您可以使用async
來避免六行TaskCompletionSource<T>
和try
/ catch
代碼。 但這是一個非常小的用例; 在絕大多數情況下,警告是有幫助的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.