【问题标题】:What does an async Web API method return?异步 Web API 方法返回什么?
【发布时间】:2017-01-30 20:47:06
【问题描述】:

具有以下签名的 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 为真之前,框架不会向调用客户端返回响应,或者 2)框架确实返回给客户端,但客户端必须优雅地处理这种情况,或者 3) 完全不同的东西。

【问题讨论】:

  • 是1号)
  • 一旦您了解了异步语法糖背后的状态机,就更容易意识到真正发生了什么。
  • 我以为我理解状态机,但这将是 Web API 在此之上提供额外功能,是吗?

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


【解决方案1】:

async 操作是一个实现细节。

框架会等待Task解析;客户不会注意到任何差异。

【讨论】:

    【解决方案2】:

    从您提供的链接:

    以这种方式编写异步代码可以释放线程,同时从数据库中检索数据(书籍和评论)并将其转换为对象以供我们的代码使用。异步操作完成后,代码会从原来的位置继续执行。 (我们的意思是水合数据对象被传递到底层框架并转换为 JSON/XML 并返回给客户端)。

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2012-08-08
      • 2016-08-30
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 2017-03-21
      • 2015-03-30
      相关资源
      最近更新 更多