2016-11-19 42 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

相关问题