【问题标题】: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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多