异步Web API方法返回什么?

时间:2017-01-30 20:47:06

标签: c# asp.net-web-api async-await

具有以下签名的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)完全不同的东西。

2 个答案:

答案 0 :(得分:5)

async操作是一个实现细节。

框架将等待Task解决;客户不会发现任何差异。

答案 1 :(得分:2)

从您提供的链接:

  

以这种方式编写异步代码允许在从数据库中检索数据(书籍和评论)并将其转换为我们的代码要使用的对象时释放线程。当异步操作完成时,代码将获取它所在的位置并继续执行。 (通过它,我们的意思是将水合数据对象传递给底层框架并转换为JSON / XML并返回给客户端。)

相关问题