C# 服务结构是否使用SynchronizationContext/是否可以停止写入ConfigureWait(false)?

C# 服务结构是否使用SynchronizationContext/是否可以停止写入ConfigureWait(false)?,c#,asynchronous,.net-core,azure-service-fabric,nservicebus,C#,Asynchronous,.net Core,Azure Service Fabric,Nservicebus,无论何时进行异步调用,使用ConfigureAwait(false)都是一种很好的做法。然后,ASP.NET核心出现了,它使用线程池上下文而不是线程上下文,这变得无关紧要。我的理解是,这与它是.NET核心这一事实无关,而是ASP.NET的一个新实现设法改进了一些东西,因此我们不再需要编写这个恼人的ConfigureAwait(false)。如果我知道我的代码将只由服务结构服务托管,并且如果它托管在有状态/无状态服务上(在.NET Framework或.NET Core中实现),那么我是否仍然需要

无论何时进行异步调用,使用
ConfigureAwait(false)
都是一种很好的做法。然后,ASP.NET核心出现了,它使用线程池上下文而不是线程上下文,这变得无关紧要。我的理解是,这与它是
.NET核心
这一事实无关,而是
ASP.NET
的一个新实现设法改进了一些东西,因此我们不再需要编写这个恼人的
ConfigureAwait(false)
。如果我知道我的代码将只由服务结构服务托管,并且如果它托管在有状态/无状态服务上(在
.NET Framework
.NET Core
中实现),那么我是否仍然需要使用
ConfigureAwait(false)
,我没有找到任何有意义的答案,使用Azure服务总线处理程序或可能依赖于
SynchronizationCntext
NServiceBus
处理程序


服务结构是否使用了
SynchronizationContext
,当代码仅托管在服务结构中时,是否可以放弃
ConfigureAwait(false)

“使用
ConfigureAwait(false)
”的良好实践-这是一个非常有争议的说法@AlexeiLevenkov在该答案和链接的博客中说,[在ASP.NET核心中]您不需要ConfigureAwait(false),但仍在库中使用它。换句话说,它只是说把它放到
ASP.NET内核中
,然后在其他地方使用它。我的问题是-还有什么地方可以停止这样做。在任何地方使用
ConfigureAwait(false)
而不考虑它总是一个坏主意。它可能会导致错误,除非您知道它在做什么,否则很难找到这些错误(比如
HttpContext
在等待异步调用后突然变为null)。唯一应该作为规则使用的地方是图书馆。它只解决了对异步方法进行阻塞调用时出现的死锁问题,而库不知道如何调用这些方法。如果您不需要访问线程上下文(UI应用程序,
ASP.NET
等),则@GabrielLuci是有可能的,但上面提到的答案、链接的博客和许多MSDN文章都说了相反的话这是个好主意。对——“如果”。这就是我的意思。我看到人们总是到处使用
ConfigureAwait(false)
而不了解它的功能。这是自找麻烦。“使用
ConfigureAwait(false)
的良好实践”-这是一个非常有争议的说法@AlexeiLevenkov在该答案和链接的博客中说,[在ASP.NET核心中]您不需要ConfigureAwait(false),但仍在库中使用它。换句话说,它只是说把它放到
ASP.NET内核中
,然后在其他地方使用它。我的问题是-还有什么地方可以停止这样做。在任何地方使用
ConfigureAwait(false)
而不考虑它总是一个坏主意。它可能会导致错误,除非您知道它在做什么,否则很难找到这些错误(比如
HttpContext
在等待异步调用后突然变为null)。唯一应该作为规则使用的地方是图书馆。它只解决了对异步方法进行阻塞调用时出现的死锁问题,而库不知道如何调用这些方法。如果您不需要访问线程上下文(UI应用程序,
ASP.NET
等),则@GabrielLuci是有可能的,但上面提到的答案、链接的博客和许多MSDN文章都说了相反的话这是个好主意。对——“如果”。这就是我的意思。我看到人们总是到处使用
ConfigureAwait(false)
而不了解它的功能。那是自找麻烦。