什么是捕获的上下文以及它是如何处理的

时间:2017-12-19 10:38:57

标签: c# multithreading async-await

在代码中,当在DoThis()中等待任务时,捕获上下文并且它是UI线程上下文。并且该方法的其余部分将在我不使用Configure.Await(false)的相同上下文中恢复 我想知道“捕获的上下文”是什么意思?这是否意味着线程的状态 - 就像它的寄存器和堆栈一样 - 被保存在内存中的某个位置,一旦异步操作完成,该方法的其余部分将使用已保存的寄存器n堆栈值恢复?如果是这样,那么这是否意味着UI线程必须切换到捕获的上下文以恢复该方法。 DoAsync完成后,再次在btn_Click中切换回上下文?那样UI线程看起来像处理2个上下文,一次一个..我很困惑!

代码

  public static async Task DoAsync()
  {
      // executed in UI thread
      ....
      ....

      Task t1 = await DoThis(uri); // async operation executed in Thread Pool thread       
      .... 
      msg.Text = "Work Accomplished";  // UI Control can only be accessed in UI thread 
    }
  }

protected async void btn_Click(object sender, EventArgs e)
{
  // Since we asynchronously wait, the UI thread is not blocked.
  // ** This allows the thread to handle other requests while we are waiting. **
  await DoAsync();

      .... 
      ....
}

我在这个问题上已经阅读了一些posts,但我发现很难理解背后的概念,因为它们以更困难的方式解释。我希望有人 用更简单的术语解释完成它所涉及的复杂性。

0 个答案:

没有答案