簡體   English   中英

CS1998“方法缺乏等待運營商”背后的原因是什么?

[英]What is the reason behind CS1998 “method lacks await operators”

async方法缺少任何await運算符時,C#編譯器會生成CS1998警告。

警告背后的原因是什么?

我知道async通過添加狀態機和異常處理在方法中引入了開銷。

警告性能的主要原因是什么? 或者有理由通知我,我可能已經忘記了await某個地方?

也許來自語言設計團隊的人可以對這一個有所了解...... :)

(請:不要發布說“你可以刪除async以使警告消失”的答案。我想知道警告背后的原因和決定,而不是解決問題的方法。)

警告背后的原因是什么?

簡單地說,一個不使用awaitasync方法幾乎肯定是錯誤的。 並非總是錯誤,否則這將是一個錯誤。 幾乎總是錯的,因此警告。

一個非常常見的異步 - 新手錯誤是假設async意味着“使這個方法異步”。 這通常與“異步”意味着“在后台線程上運行”的假設配對,但有時它只是“魔術”的假設。

因此,警告明確指出代碼將同步運行。

我還發現這個重構自己的代碼時警告有益的-有時我結束了一個async應改為同步方式方法,和此警告點了這一點。

如果你有非平凡的(即可能是異常生成的)同步代碼並且需要實現異步方法簽名,那么沒有await async可能對減少代碼很有用。 在這種情況下,您可以使用async來避免六行TaskCompletionSource<T>try / catch代碼。 但這是一個非常小的用例; 在絕大多數情況下,警告是有幫助的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM