Asp.net core mvc 是否需要在Visual Studio 2017 ASP.NET核心MVC中将异步添加到控制器操作
我刚刚将我的Visual Studio 2015 ASP.NET MVC核心项目转换为Visual Studio 2017…我在错误列表中收到以下信息性消息 消息IDE1006命名规则冲突:缺少后缀:“Async” 此消息出现在我的控制器中,主要关注以下内容: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多个事件。似乎我需要将索引更
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的视图,除非您指定所需的视图。而且他们对修复它不感兴趣()