Я наткнулся на проблему ( https://github.com/HTBox/allReady/issues/1313 ) на GitHub, где они обсуждали удаление ConfigureAwait(false)
кода, утверждая, что в ASP.NET Core
вызов
ConfigureAwait(false)
является избыточным и ничего не делает
Лучшее, что я смог найти здесь, - это «примечание» в ответе (от Стивена Клири, https://stackoverflow.com/a/40220190/2805831 ), в котором говорится, что
ASP.NET Core больше не имеет «контекста»
Итак, ConfigureAwait(false)
действительно ли это не нужно в ASP.NET Core (даже при использовании полной .Net Framework)? Есть ли реальный прирост производительности в некоторых случаях или разница в результате / семантике?
РЕДАКТИРОВАТЬ: В этом аспекте все по-другому, если я размещаю его как консольное приложение или в IIS?
.net
asp.net-core
async-await
Педро Лоренц
источник
источник
ConfigureAwait(false)
, поскольку библиотека может использоваться различными приложениями (ASP.NET Core, WPF, UWP, Console и т. Д.)ConfigureAwait(false)
Хотя это и актуально для классической версии ASP.NET, в этом нет необходимости . Это компромисс: он как бы смягчает некоторые взаимоблокировки синхронизации по асинхронности (которые в любом случае являются недостатками дизайна - они не существуют, если кто-то не делает что-то глупое) и иногда дает повышение производительности ~ микросекунды, не перезагружая контекст. Ценой невозможности зависеть от контекста иConfigureAwait
прохождения всего кода. stackoverflow.com/questions/28221508/…Ответы:
ConfigureAwait
влияет только на код, выполняющийся в контексте,SynchronizationContext
которого нет в ASP.NET Core (в ASP.NET «Legacy» есть).Код общего назначения должен по-прежнему использовать его, потому что он может работать с расширением
SynchronizationContext
.Контекст синхронизации ASP.NET Core
источник
Как насчет этого?
В настоящий момент (февраль 2020 г.) разработчики в блоге MS рекомендуют использовать ConfigureAwait (false) для повышения производительности и предотвращения взаимоблокировок. https://devblogs.microsoft.com/dotnet/configureawait-faq/
источник