在代码中,当在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,但我发现很难理解背后的概念,因为它们以更困难的方式解释。我希望有人 用更简单的术语解释完成它所涉及的复杂性。