Я пытаюсь сравнить (используя сканер Apache) пару конечных точек ASP.NET Web API 2.0. Один из них синхронный и один асинхронный.
[Route("user/{userId}/feeds")]
[HttpGet]
public IEnumerable<NewsFeedItem> GetNewsFeedItemsForUser(string userId)
{
return _newsFeedService.GetNewsFeedItemsForUser(userId);
}
[Route("user/{userId}/feeds/async")]
[HttpGet]
public async Task<IEnumerable<NewsFeedItem>> GetNewsFeedItemsForUserAsync(string userId)
{
return await Task.Run(() => _newsFeedService.GetNewsFeedItemsForUser(userId));
}
После просмотра презентации Стива Сандерсона я выпустил следующую команду ab -n 100 -c 10 http://localhost....
для каждой конечной точки.
Я был удивлен, поскольку тесты для каждой конечной точки были примерно одинаковыми.
Отправляясь на то, что Стив объяснил, я ожидал, что конечная точка async будет более результативной, потому что она немедленно выпустит потоки пула потоков обратно в пул потоков, что сделает их доступными для других запросов и улучшит пропускную способность. Но цифры кажутся точно такими же.
Что я не понимаю здесь?