线程池线程需要 ConfigureAwait(false) 吗?

ConfigureAwait(false) needed with threadpool threads?

假设我不关心同步上下文,当我已经在 ThreadPool 线程中时,等待调用是否需要 .ConfigureAwait(false)?例如,我通过以下方式开始我的异步操作:

await Task.Run(() => myService.DoSomething());

我知道如果你不关心上下文并且你在 UI 线程或 ASP.NET 请求中,我知道它很重要,只是想知道它是否提供相同的好处这些情况之外的异步操作。

如果存在当前同步上下文(即使线程 运行 代码是线程池线程),它也会被使用。如果您不想使用该同步上下文,则需要使用 ConfigureAwait(false)。如果没有当前同步上下文,那么 ConfigureAwait(false) 不会做任何事情,因为没有要捕获的同步上下文,并且您是否拥有它是无关紧要的。如果您希望捕获同步上下文(无论当前线程是否是线程池线程),那么您将不希望调用 ConfigureAwait.

简而言之,您是否 运行 作为线程池线程与是否应捕获同步上下文的决定无关。