У меня есть проект ASP. NET Core 3.1, написанный с использованием C#. Мне известно, что лучше всего использовать await
и async
при доступе к внешним ресурсам, таким как извлечение данных из базы данных, доступ к файлам или выполнение HTTP-запроса. Это освобождает поток, так что вместо этого выполняется больше работы, чтобы поток бездействовал в ожидании завершения кода sh.
Однако я пытаюсь выяснить, в какой момент использование async/await
снизит производительность ? Выполняется ли процесс освобождения потока при вызове await
и извлечения потока после завершения задачи?
Следующий код вызывается асинхронно. На самом деле этот код не нужно вызывать асинхронно, поскольку весь код выполняется в памяти и внешние запросы не выполняются.
public interface ILocator
{
Task<Model> ExampleAsync();
}
public class Example : Controller
{
public ILocator Locator { get; set; }
public Example(ILocator locator)
{
Locator = locator;
}
public async Task<IActionResult> Example()
{
Model model = await Locator.ExampleAsync();
return View(model);
}
}
public class Locator : ILocator
{
pubilc Task ExampleAsync()
{
Example model = new Example();
model.Status = "New";
return Task.CompletedTask;
}
}
Вот синхронная версия приведенного выше кода
public interface ILocator
{
Model Example();
}
public class Example : Controller
{
public ILocator Locator { get; set; }
public Example(ILocator locator)
{
Locator = locator;
}
public IActionResult Example()
{
Model model = Locator.Example();
return View(model);
}
}
public class Locator : ILocator
{
pubilc Example()
{
Example model = new Example();
model.Status = "New";
}
}
Будет ли асинхронная версия кода иметь более высокую стоимость / более низкую производительность, чем синхронная версия, из-за ненужного использования await/async
?
Когда async/await
принесет больше вреда, чем пользы?