ASP.NET Core Task<IActionResult> 不能在没有异步的情况下返回 NotFound() 和 OK()

Low*_*hye 0 c# asp.net-core

这个函数给出了一个错误:

[HttpPost]
public Task<IActionResult> Something (string value)
{
     Student student = new Student();
     if (value == "LOW")
     {
         return NotFound();
     }

     return Ok();
}
Run Code Online (Sandbox Code Playgroud)

此功能工作正常:

[HttpPost]
public async Task<IActionResult> Something (string value)
{
     Student student = new Student();
     if (value == "LOW")
     {
         return NotFound();
     }
     return Ok();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试return NotFound();return Ok();当我asnyc之前不包含关键字时,Task如上所示,它给了我错误。但是,当我async在 前面添加关键字时Task,它在编译器中没有显示任何错误。你能告诉我是什么原因造成的吗?

Dav*_*vid 5

async关键字告诉编译器,而该方法返回一个Task,所述方法中的代码,预计以异步的方式并在内部运行await的东西。编译器将查找一个或多个awaits 并修改方法的结构,以围绕任务和任务的延续包装功能。所以最终编译器会Task<T>为你将返回的结果包装在 a中。

基本上,你的逻辑可以专注于你想要返回的值,而不是专注于异步性的结构。在asyncawait使这部分简单的关键字存在。

所以这两种方法其实都有一个问题:

  1. 第一种方法不是async,所以编译器不希望以任何方式修改它。相反,编译器期望它返回它所说的将返回的内容,即Task<IActionResult>. 它不会返回那个,所以编译器会产生一个错误。
  2. 第二种方法是async,但在该方法中无处可做await。编译器可以完成这项工作,但会产生警告,指出此async方法中没有等待任何内容。

所以两者都是错误的。由于您的方法不执行任何异步操作,请不要这样做async

[HttpPost]
public IActionResult Something(string value)
{
    Student student = new Student();
    if (value == "LOW")
    {
        return NotFound();
    }
    return Ok();
}
Run Code Online (Sandbox Code Playgroud)

如果该方法内部需要某些东西,您只需要创建该方法async(并Task<T>围绕返回类型包装 a )await