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

时间:2015-03-19 18:29:35

标签: c# .net multithreading asynchronous async-await

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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