Me deparei com um problema ( https://github.com/HTBox/allReady/issues/1313 ) no GitHub, onde eles discutiram sobre como tirar ConfigureAwait(false)
o código do código, alegando que, no ASP.NET Core
a chamada para
ConfigureAwait(false)
é redundante e não faz nada
O melhor que pude encontrar aqui é uma "observação lateral" em uma resposta (de Stephen Cleary, https://stackoverflow.com/a/40220190/2805831 ) dizendo que
ASP.NET Core não tem mais um "contexto"
Então, é ConfigureAwait(false)
realmente desnecessário no ASP.NET Core (mesmo usando o .NET Framework completo)? Tem algum ganho real de desempenho em alguns casos ou diferença no resultado / semântica?
EDIT: É diferente neste aspecto se eu estou hospedando-o como um aplicativo de console ou no IIS?
fonte
ConfigureAwait(false)
, pois a biblioteca pode ser consumida por diferentes aplicativos (ASP.NET Core, WPF, UWP, Console etc.)ConfigureAwait(false)
, embora seja relevante no ASP.NET clássico, não é de forma alguma necessário . É uma troca: meio que mitiga alguns deadlocks de sincronização sobre as sincronizações (que são falhas de design de qualquer maneira - eles não existem a menos que alguém faça algo estúpido) e ocasionalmente tem um aumento de desempenho de ~ microssegundos por não recarregar o contexto. Ao custo de não poder depender do contexto e de terConfigureAwait
tudo por meio de seu código. stackoverflow.com/questions/28221508/…Respostas:
ConfigureAwait
tem efeitos apenas no código em execução no contexto de umSynchronizationContext
que o ASP.NET Core não tem (o ASP.NET "Legado" tem).O código de uso geral ainda deve usá-lo porque pode estar sendo executado com um
SynchronizationContext
.ASP.NET Core SynchronizationContext
fonte
Que tal isso?
No momento (Fev-2020), os desenvolvedores do MS Blog recomendam o uso de ConfigureAwait (false) para melhorar o desempenho, evitando deadlocks. https://devblogs.microsoft.com/dotnet/configureawait-faq/
fonte