我仍然不太清楚 .net 4.5 中的 async 和 await 。到目前为止,我想我理解等待:
- 将函数(在其右侧)放在单独的线程上。
- 将执行返回给当前函数的调用者
- 但保留当前函数的其余代码“人质”,直到等待(异步)函数完成。
如果我误解了什么,请纠正我。所以,如果上述情况属实,我就会坚持使用我想要异步的 ApiController 的 Post 函数:
[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)
. 但我还没有HttpResponseMessage
对象,因为等待被return Request.CreateResponse(HttpStatusCode.Created, obj);
“人质”。
在上面这个简单的例子中,调用是否会立即返回到客户端(即客户端 JS 网站或移动应用程序)?如果是这样,它会是 201、400、500(最好不要),还是其他?