c# - ASP.NET 核心任务没有异步就无法返回 NotFound() 和 OK()
问题描述
此函数给出错误:
[HttpPost]
public Task<IActionResult> Something (string value)
{
Student student = new Student();
if (value == "LOW")
{
return NotFound();
}
return Ok();
}
此功能工作正常:
[HttpPost]
public async Task<IActionResult> Something (string value)
{
Student student = new Student();
if (value == "LOW")
{
return NotFound();
}
return Ok();
}
如上所示,当我尝试return NotFound();
或之前return Ok();
不包含关键字时,它会给我错误。但是,当我在前面添加关键字时,它不会在编译器中显示任何错误。你能告诉我这是什么原因造成的吗?asnyc
Task
async
Task
解决方案
async
关键字告诉编译器,当方法返回 a 时,方法Task
中的代码应该以异步方式运行,并且在内部运行await
。编译器将查找一个或多个await
s 并修改方法的结构以将功能包装在任务和任务的延续中。所以最终编译器会将返回的结果包装在 aTask<T>
中。
基本上,你的逻辑可以专注于你想要返回的值,而不是专注于异步的结构。async
和关键字的await
存在是为了使该部分更简单。
所以这两种方法其实都有一个问题:
- 第一种方法 is not
async
,因此编译器不希望以任何方式修改它。相反,编译器期望它返回它说它将返回的内容,即Task<IActionResult>
. 它不会返回,因此编译器会产生错误。 - 第二种方法是
async
,但在该方法中没有await
任何作用。编译器可以完成这项工作,但会产生一个警告,表明此async
方法中没有等待任何内容。
所以两者都是错误的。由于您的方法没有执行任何异步操作,因此请不要这样做async
:
[HttpPost]
public IActionResult Something(string value)
{
Student student = new Student();
if (value == "LOW")
{
return NotFound();
}
return Ok();
}
如果方法内部需要某些东西,您只需要创建方法async
(并围绕返回类型包装) 。Task<T>
await
推荐阅读
- python-3.x - 在 python 中制作 djangorestapi 时如何在模型中创建可选字段?
- c# - 如何在winforms文本框中获取默认垂直滚动条的位置
- reactjs - Victory Charts:深入研究 fixLabelOverlap 道具以获得反应图表的胜利库
- plsqldeveloper - oracle 应用程序中自定义表和种子表之间的区别
- svg - SVG 图像下载 URL 链接在 Xamarin 表单中的 FFImageLoading 中不起作用
- kubernetes - 为 helm 的 gcp 服务帐户创建密钥
- python - 如果我们扩展或减少同一模型的层,我们仍然可以从 Pytorch 中的预训练模型进行训练吗?
- permissions - 使用 Certutil 的 ImportPfx 不授予任何适当的权限
- flutter - Flutter DropdownButton 出现错误
- php - 根据 WooCommerce 购物车中的商品数量和产品类别禁用支付网关