这个函数给出了一个错误:
[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,它在编译器中没有显示任何错误。你能告诉我是什么原因造成的吗?
的async关键字告诉编译器,而该方法返回一个Task,所述方法中的代码,预计以异步的方式并在内部运行await的东西。编译器将查找一个或多个awaits 并修改方法的结构,以围绕任务和任务的延续包装功能。所以最终编译器会Task<T>为你将返回的结果包装在 a中。
基本上,你的逻辑可以专注于你想要返回的值,而不是专注于异步性的结构。在async和await使这部分简单的关键字存在。
所以这两种方法其实都有一个问题:
async,所以编译器不希望以任何方式修改它。相反,编译器期望它返回它所说的将返回的内容,即Task<IActionResult>. 它不会返回那个,所以编译器会产生一个错误。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。
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |