【发布时间】:2019-01-08 13:50:42
【问题描述】:
我们说,如果等待的表达式不完整,则使用异步方法 暂停并返回给调用者。
一旦等待的表达式完成,它就会恢复执行。
它在哪个上下文中恢复由 ConfigureAwait 决定。
但是在等待的表达式完成后暂停和返回调用者以及恢复之间会发生什么。
等待的表达式执行在哪里意味着while?
在线程池线程或 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");
}
【问题讨论】:
-
GetString安排在 ThreadPool 线程上,并返回TaskAwaiter以保留引用。如果TaskAwaiter在代码跳出当前状态之前完成,则返回结果,代码进入下一个等待。如果未完成,则TaskAwaiter正在等待任务,并为任务配置了继续等待。
标签: asynchronous async-await nonblocking c#-5.0