具有以下签名的Web API方法实际返回了什么内容?
[HttpPost]
public async Task<IHttpActionResult> Post([FromBody] ReviewViewModel review)
{
using (var context = new BooksContext())
{
var book = await context.Books.FirstOrDefaultAsync(b => b.Id == review.BookId);
if (book == null)
{
return NotFound();
}
var newReview = context.Reviews.Add(new Review
{
BookId = book.Id,
Description = review.Description,
Rating = review.Rating
});
await context.SaveChangesAsync();
return Ok(new ReviewViewModel(newReview));
}
}
方法取自:http://www.developerhandbook.com/c-sharp/create-restful-api-authentication-using-web-api-jwt/
我正在考虑它是:
1)在.IsCompleted为true之前,框架不会向调用客户端返回响应,或者 2)框架确实返回到客户端,但客户端必须优雅地处理这种情况,或者 3)完全不同的东西。
答案 0 :(得分:5)
async
操作是一个实现细节。
框架将等待Task
解决;客户不会发现任何差异。
答案 1 :(得分:2)
从您提供的链接:
以这种方式编写异步代码允许在从数据库中检索数据(书籍和评论)并将其转换为我们的代码要使用的对象时释放线程。当异步操作完成时,代码将获取它所在的位置并继续执行。 (通过它,我们的意思是将水合数据对象传递给底层框架并转换为JSON / XML并返回给客户端。)