2016-11-19 38 views
3

我剛剛將Visual Studio 2015 ASP.NET MVC Core項目轉換爲Visual Studio 2017 ...並且我在下面獲取了以下參考消息我的錯誤列表我是否需要將異步添加到我在Visual Studio中的控制器操作2017 ASP.NET核心MVC

消息IDE1006命名規則衝突:缺少後綴:在我的控制器,可重點關注以下發生「異步」

此消息:

public async Task<IActionResult> Index() 

這也適用於創建,刪除,細節和編輯。這些消息顯示爲「信息性」,適用於我的項目中超過1,000次的發生。看起來我需要將索引更改爲IndexAsync 即。
變化來自:

public async Task<IActionResult> Index() 
public async Task<IActionResult> Create() 
public async Task<IActionResult> Delete(int? id) 
public async Task<IActionResult> Details(int? id) 

更改爲:

public async Task<IActionResult> IndexAsync() 
public async Task<IActionResult> CreateAsync() 
public async Task<IActionResult> DeleteAsync(int? id) 
public async Task<IActionResult> DetailsAysnc(int? id) 

這似乎是在這個時候我的項目將建立可選的,它不是在VS 2015的問題,我不介意做該工作,我需要確認在Visual Studio 2017 ASP.NET Core中更改此方法是正確的方法。

回答

5

微軟正在將您的異步方法加入後綴爲async的方向。爲什麼? Visual Studio 2017的release notes提到了這個珍聞。

任務狀返回類型異步方法:這引入了從異步方法返回任何任務狀類型的能力 。以前這些 返回類型被限制爲Task<T>Task

聽起來像它會剛剛從檢查它們的返回類型變得不那麼明顯,其方法是異步的。將它們與async後綴可能是一個好主意。在VS做這個「建議」之前,有一個辯論公約的previous stack overflow question。來自微軟的Stephen Toub解決了這個問題,我引用他的話。

如果一個公共方法是任務的返回是異步的性質(相對於已知可總是同步執行到 完成的方法 但仍然會返回一個任務由於某種原因),它應該有 一個「異步」後綴。這是指導原則。這裏的主要目標是讓 功能的消費者非常清楚所調用的方法可能不會同步完成 的所有工作;它當然也有助於 這種情況,其中功能可以通過同步和異步 方法公開,因此您需要名稱區別來區分它們。如何 的方法實現它的異步執行是無關緊要的 命名:是否異步/伺機用來爭取編譯器的幫助下, 還是從System.Threading.Tasks類型和方法是直接使用 (如TaskCompletionSource)不真的很重要,因爲 不影響該方法的簽名,就方法的使用者而言。

當然,指南總是有例外。在命名的情況下,最顯着的一種情況是整個 類型的存在是爲了提供異步聚焦的功能,在 中,對每種方法具有異步的情況將是過度殺傷的情況。任務本身上產生其他任務的 方法。

至於返回空值的異步方法, 那些在公共表面區域是不可取的,因爲調用者沒有好的方法 知道異步工作何時完成。但是,如果您必須公開公開 無返回異步方法,那麼您可能確實想要使用 的名稱來表示異步工作正在啓動,並且您可以在此處使用「異步」後綴。 鑑於這種情況應該是多麼罕見,我認爲這確實是一個個案決定。

我希望幫助,史蒂夫

底線,它的信息。但是,隨着微軟將回報類型擴展到Task之外,它開始越來越像最佳實踐。使用你自己的判斷。

0

我注意到,對於MVC控制器類,除了將Async添加到方法名稱之外,我需要添加[ActionName(「MethodName」)]作爲方法屬性,其中「MethodName」末尾沒有Async 。如果我沒有添加ActionName屬性,代碼會編譯,但是URL不會路由到方法,除非我在URL中添加了Async。我不想在我的網址中使用異步,所以我最終在任何地方添加了ActionName屬性。 MVC路由引擎似乎應該嘗試查找Async方法,但它不會。

+0

比這更糟糕的是,默認情況下,它會在視圖名稱末尾使用Async查找視圖,除非您指定了您想要的視圖。他們對解決這個問題不感興趣(https://developercommunity.visualstudio.com/content/problem/6046/ide1006-naming-rule-violation-missing-suffix-async.html) – saluce

相關問題