【发布时间】:2017-05-11 10:52:36
【问题描述】:
在一些关于异步 Web api 2 操作的文章中,我发现了以下代码,展示了如何在 Web Api 2 中实现异步操作:
public class UserController : ApiController
{
ApiSecurityEntities _db = new ApiSecurityEntities();
public async Task<IHttpActionResult> Delete(Int32 Id)
{
var record = await _db.UserMaster.Where(f => f.id == Id).FirstOrDefaultAsync();
if (record != null)
{
_db.UserMaster.Remove(record);
await _db.SaveChangesAsync();
return Ok();
}
return NotFound();
}
}
我想这段代码不是异步的,但它只用async/await 字包裹。你能打消我的疑虑吗?
#EDIT
我认为这不是真正的异步代码的原因:
- 在第一个
await之后只有if语句必须等待上一个操作,并且在这个块之后不会做任何其他工作,所以它会同步运行 - 第二个
await之后有return语句,所以必须等到_db.SaveChangesAsync();完成
【问题讨论】:
-
为什么不应该是异步的?
-
拥有
await关键字将允许框架在等待数据库返回数据时执行其他工作.. -
“我想这段代码不是异步的”——你能澄清一下为什么你认为这段代码不是异步的吗?您在这里有两个异步数据库操作
-
@mkul 不。整台计算机可以做其他事情,而不仅仅是你的代码。这也是一个 Web API 控制器,所以可以有多个用户/线程..
-
我相信您可能将异步与多线程混淆了。
标签: c# asp.net asynchronous