Natknąłem się na problem ( https://github.com/HTBox/allReady/issues/1313 ) w GitHub, gdzie dyskutowali o ConfigureAwait(false)
usunięciu kodu, twierdząc, że w ASP.NET Core
wywołanie
ConfigureAwait(false)
jest zbędne i nic nie robi
Najlepsze, co udało mi się tutaj znaleźć, to „uwaga dodatkowa” w odpowiedzi (od Stephena Cleary, https://stackoverflow.com/a/40220190/2805831 ), która mówi, że
ASP.NET Core nie ma już „kontekstu”
Czy jest więc ConfigureAwait(false)
naprawdę niepotrzebne w ASP.NET Core (nawet jeśli używasz pełnego .Net Framework)? Czy w niektórych przypadkach przynosi rzeczywisty wzrost wydajności lub różnicę w wyniku / semantyce?
EDYCJA: Czy jest inaczej w tym aspekcie, jeśli hostuję ją jako aplikację konsolową lub w usługach IIS?
.net
asp.net-core
async-await
Pedro Lorentz
źródło
źródło
ConfigureAwait(false)
, ponieważ biblioteka może być używana przez różne aplikacje (ASP.NET Core, WPF, UWP, konsola itp.)ConfigureAwait(false)
, chociaż istotna w klasycznym ASP.NET, nie jest w żadnym wypadku konieczna . To kompromis: trochę łagodzi niektóre zakleszczenia synchronizacji przez asynchronię (które i tak są wadami projektowymi - nie istnieją, chyba że ktoś zrobi coś głupiego) i czasami ma ~ mikrosekundowy wzrost wydajności, nie ładując ponownie kontekstu. Kosztem braku możliwości polegania na kontekście iConfigureAwait
przechodzenia przez cały kod. stackoverflow.com/questions/28221508/…Odpowiedzi:
ConfigureAwait
ma wpływ tylko na kod działający w kontekście,SynchronizationContext
którego ASP.NET Core nie ma (tak jak ASP.NET „Legacy”).Kod ogólnego przeznaczenia powinien nadal go używać, ponieważ może działać z rozszerzeniem
SynchronizationContext
.ASP.NET Core SynchronizationContext
źródło
A co z tym?
W tej chwili (luty-2020) programiści na MS Blog zalecają użycie ConfigureAwait (false) w celu poprawy wydajności i uniknięcia zakleszczeń. https://devblogs.microsoft.com/dotnet/configureawait-faq/
źródło