Asp.net core mvc 是否需要在Visual Studio 2017 ASP.NET核心MVC中将异步添加到控制器操作

Asp.net core mvc 是否需要在Visual Studio 2017 ASP.NET核心MVC中将异步添加到控制器操作,asp.net-core-mvc,visual-studio-2017,Asp.net Core Mvc,Visual Studio 2017,我刚刚将我的Visual Studio 2015 ASP.NET MVC核心项目转换为Visual Studio 2017…我在错误列表中收到以下信息性消息 消息IDE1006命名规则冲突:缺少后缀:“Async” 此消息出现在我的控制器中,主要关注以下内容: public async Task<IActionResult> Index() 公共异步任务索引() 这也适用于创建、删除、详细信息和编辑。这些消息显示为信息性消息,适用于我的项目中的1000多个事件。似乎我需要将索引更

我刚刚将我的Visual Studio 2015 ASP.NET MVC核心项目转换为Visual Studio 2017…我在错误列表中收到以下信息性消息

消息IDE1006命名规则冲突:缺少后缀:“Async”

此消息出现在我的控制器中,主要关注以下内容:

public async Task<IActionResult> Index()
公共异步任务索引()
这也适用于创建、删除、详细信息和编辑。这些消息显示为信息性消息,适用于我的项目中的1000多个事件。似乎我需要将索引更改为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)
公共异步任务索引()
公共异步任务创建()
公共异步任务删除(int?id)
公共异步任务详细信息(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)
public异步任务IndexAsync()
公共异步任务CreateAsync()
公共异步任务DeleteAsync(int?id)
公共异步任务详细信息saysnc(int?id)

这似乎是可选的在这个时候,因为我的项目将建立,这不是一个问题在VS 2015。我不介意做这项工作,我需要确认在Visual Studio 2017 ASP.NET Core中更改此选项是正确的方法。

Microsoft正在推动您向异步方法添加async一词的方向前进。为什么?Visual Studio 2017年版提到了这一点

异步方法的类似任务的返回类型:这引入了 从异步方法返回任何类似任务的类型。以前这些 返回类型被限制为
Task
Task

听起来,仅仅通过检查返回类型,就不太明显哪些方法是异步的。用async作为后缀可能是个好主意。在VS提出这个“建议”之前,有一场关于公约的辩论。微软的Stephen Toub提到了这一点,我引用他的话

如果公共方法正在返回任务并且本质上是异步的(如 与已知总是与同步执行的方法相反 完成但由于某种原因仍返回任务),它应该 “异步”后缀。这就是指导方针。这里的主要目标是 命名是为了让产品的消费者非常清楚 被调用的方法可能无法完成的功能 所有工作同步进行;当然,这也有助于解决这个问题 其中同步和异步功能都公开 方法,以便需要名称差异来区分它们。怎么 该方法实现了异步实现,这对 命名:是否使用async/await获得编译器的帮助, 或者是否使用System.Threading.Tasks中的类型和方法 直接(例如TaskCompletionSource)实际上并不重要,因为 对方法的使用者而言,不会影响方法的签名 方法方面

当然,指导方针总是有例外。最 在命名方面值得注意的一个例子是 类型的存在理由是提供以异步为中心的功能 在哪种情况下,在每个方法上都使用Async将是过分的,例如 任务本身上生成其他任务的方法

对于void返回异步方法,不希望 那些在公共区域的人,因为打电话的人没有很好的沟通方式 知道异步工作何时完成。如果你必须揭露 不过,您很可能会公开返回异步方法 想要有一个名称来传达正在进行的异步工作吗 已启动,如果有意义,可以在此处使用“Async”后缀。 考虑到这种情况应该是多么罕见,我认为这真的是一个问题 一个接一个的决定

我希望这会有帮助,史蒂夫


底线是,这是信息性的。但随着微软将退货类型扩展到任务之外,它越来越像最佳实践。用你自己的判断

我注意到,对于MVC控制器类,除了向方法名添加Async之外,我还需要添加[ActionName(“MethodName”)]作为方法属性,其中“MethodName”末尾没有Async。如果我没有添加ActionName属性,代码将被编译,但是URL不会路由到方法,除非我在URL中也添加了Async。我不想在我的URL中使用异步,所以我在所有地方都添加了ActionName属性。MVC路由引擎似乎应该尝试查找异步方法,但事实并非如此

更糟糕的是,默认情况下,它将查找视图名称末尾带有Async的视图,除非您指定所需的视图。而且他们对修复它不感兴趣()