我仍然不太清楚在.net 4.5中异步和等待的概念。到目前为止,我认为我理解了await:
- 将(右侧)函数放在一个单独的线程上。
- 将执行返回到当前函数的调用者
- 但是保留当前函数剩余代码的其余部分“托管”,直到等待(异步)函数完成。
如果我有误,请纠正我。因此,如果以上是正确的,我卡在了要将ApiController的Post函数设置为async:
[HttpPost]
public async Task<HttpResponseMessage> Post([FromBody]MyObject obj)
{
myDataContext.MyObjects.InsertOnSubmit(obj);
myDataContext.SubmitChanges();
await SomeReallyLongRunningTaskAsync();
// obj would now have the new Id, which I'm really after.
return Request.CreateResponse(HttpStatusCode.Created, obj);
}
如果我理解正确,那么Post方法将执行完毕并返回控制权给调用myApiController.Post(obj)
的人。但是由于await让return Request.CreateResponse(HttpStatusCode.Created, obj);
被“扣押”了,所以我还没有HttpResponseMessage
对象。
在这个简单的例子中,调用会立即返回给客户端(也就是客户端JS网站或移动应用程序)吗?如果是这样,那么它会返回201、400、500(最好不要),还是其他代码?