我们说,如果等待的表达式不完整,则使用异步方法 暂停并返回到呼叫者。
等待的表达式完成后,它将恢复执行。
它恢复在哪个上下文上由ConfigureAwait决定。
但是在等待的表达式完成后,暂停,返回调用者和恢复之间会发生什么。
等待表达式在什么地方执行,而?
在线程池线程或UI线程上。
private async void Button_Click(object sender, RoutedEventArgs e)
{
// will resume on UI's context.
button.Content = await GetString().ConfigureAwait(true);
}
private async Task<string> GetString()
{
// where does this section of code runs ?
return await Task.Delay(3000).ContinueWith(x => "Async Content");
}
答案 0 :(得分:0)
线程池和UI线程都没有。它根本不执行。调用Task.Delay时,Delay方法将创建一个Timer,并且GetString和Button_Click都将返回。 3000毫秒后,Timer回调将在某个线程池线程上执行。它可以完成任务并安排任务继续执行,GetString和Button_Click中的其余代码在相应的线程上执行。