【问题标题】:ConfigureAwait(false) needed with threadpool threads?线程池线程需要 ConfigureAwait(false) 吗?
【发布时间】:2015-03-19 18:29:34
【问题描述】:
假设我不关心同步上下文,当我已经在 ThreadPool 线程中时,等待调用是否需要 .ConfigureAwait(false)?例如,我通过以下方式开始我的异步操作:
await Task.Run(() => myService.DoSomething());
我知道如果你不关心上下文并且你在 UI 线程或 ASP.NET 请求中,那么拥有它很重要,只是想知道它是否为这些情况之外的异步操作提供了相同的好处。
【问题讨论】:
标签:
c#
.net
multithreading
asynchronous
async-await
【解决方案1】:
如果存在当前同步上下文(即使运行代码的线程是线程池线程),它将被使用。如果您不想使用该同步上下文,则需要使用ConfigureAwait(false)。如果没有当前的同步上下文,那么ConfigureAwait(false) 不会做任何事情,因为没有要捕获的同步上下文,而你是否拥有它是无关紧要的。如果您希望捕获同步上下文(无论当前线程是否为线程池线程),那么您将不想调用ConfigureAwait。
简而言之,您是否作为线程池线程运行与是否应捕获同步上下文的决定无关。