【发布时间】:2020-11-26 12:07:34
【问题描述】:
我正在尝试理解我刚刚在link 中找到的这段代码:
我很好奇在 Web API 中使用异步和同步方法有什么区别:
异步:
[HttpGet("{id}", Name = "GetBook")]
public async Task<IActionResult> GetBookWithBookCovers(Guid id)
{
var bookEntity = await _booksRepository.GetBookAsync(id);
if (bookEntity == null)
{
return NotFound();
}
// get bookcovers
var bookCovers = await _booksRepository.GetBookCoversAsync(id);
// map book & covers into one BookWithCovers
var mappedBook = _mapper.Map<BookWithCovers>(bookEntity);
return Ok(_mapper.Map(bookCovers, mappedBook));
}
同步:
[HttpGet("{id}", Name = "GetBook")]
public IActionResult GetBookWithBookCovers(Guid id)
{
var bookEntity = _booksRepository.GetBook(id);
if (bookEntity == null)
{
return NotFound();
}
// get bookcovers
var bookCovers = _booksRepository.GetBookCovers(id);
// map book & covers into one BookWithCovers
var mappedBook = _mapper.Map<BookWithCovers>(bookEntity);
return Ok(_mapper.Map(bookCovers, mappedBook));
}
如果这两种方法的其中一个代码中有一个长时间运行的查询,浏览器的网络控制台会出现什么行为?
查询运行时异步方法是否会返回状态码 202?或者它会出错并说像查询超时?
【问题讨论】:
-
没有区别。 async/await 是对 HTTP 协议没有影响的 C# 实现细节。
-
让你的控制台应用程序多线程,也就是同时调用相同的 url 50 次,异步版本将能够比同步版本更好地处理这个问题。所以你应该看到异步处理更多的请求。
标签: c# asp.net-web-api task-parallel-library