Фон
В настоящее время мы разрабатываем веб-приложение, основанное на ASP.NET MVC 5, Angular.JS 1.4, веб-API 2 и Entity Framework 6. По причинам масштабируемости маневренность веб-приложений зависит от шаблона async/await, Для нашего домена требуются некоторые интенсивные вычисления, которые могут занимать несколько секунд (< 10s). Раньше некоторые члены команды использовали Task.Run, чтобы ускорить вычисления. Поскольку запуск дополнительного потока внутри ASP.NET MVC или контроллеров Web API считается плохой практикой (нить не известна IIS, поэтому рассмотренные в AppDomain Recycle = > См. сообщение в блоге Стивена Клири), они использовали ConfigureAwait (false).
Пример
public async Task CalculateAsync(double param1, double param2)
{
// CalculateSync is synchronous and cpu-intensive (<10s)
await Task.Run(() => this.CalculateSync(param1, param2))).ConfigureAwait(false);
}
Вопросы
- Есть ли какое-либо преимущество в производительности при использовании Task.Run в async Web API Controller для операций с привязкой к процессору?
- Неужели ConfigureAwait (false) действительно избегает создания дополнительного потока?