C# Async Wait实际上是一个阻塞调用吗? private异步任务GetStateInfo() { var cityId=等待GetCityIdByNameAsync(“德里”); var state=await GetStateNameAsync(cityId); 返回状态; }

C# Async Wait实际上是一个阻塞调用吗? private异步任务GetStateInfo() { var cityId=等待GetCityIdByNameAsync(“德里”); var state=await GetStateNameAsync(cityId); 返回状态; },c#,async-await,C#,Async Await,正如我们所知,async和await用于异步编程,它们用于非阻塞编程模型。但是在上面的代码中,var state=await GetStateNameAsync(cityId);当第1行从该行获取输入时执行。 所以我不明白这是阻塞呼叫还是非阻塞呼叫?请查看我的wait是一种“异步等待”,因此它“暂停”该方法并返回一个不完整的Task实例。因此,该方法正在等待由getCityIdbynameAscync返回的任务完成,但没有线程被阻止等待它。请参阅我的wait是一种“异步等待”,因此它“暂停”该方

正如我们所知,async和await用于异步编程,它们用于非阻塞编程模型。但是在上面的代码中,var state=await GetStateNameAsync(cityId);当第1行从该行获取输入时执行。
所以我不明白这是阻塞呼叫还是非阻塞呼叫?

请查看我的
wait
是一种“异步等待”,因此它“暂停”该方法并返回一个不完整的
Task
实例。因此,该方法正在等待由
getCityIdbynameAscync
返回的任务完成,但没有线程被阻止等待它。

请参阅我的
wait
是一种“异步等待”,因此它“暂停”该方法并返回一个不完整的
Task
实例。因此,该方法正在等待由
getCityIdbynameAscync
返回的任务完成,但是没有线程被阻塞在等待它。

谢谢Stephen。这意味着这一切都是关于线程的。因此,在您的注释“方法正在等待GetCityIdbynameAscync返回的任务完成”中,这里的方法正在等待意味着主线程正在等待?我知道如果我使用wait,那么UI不会像同步调用那样被阻塞/冻结。但在同步和异步模式下,它都会等待前面的工作完成,对吗?@SandipAgrawal:No;方法等待,而不是线程。这就是
async
:它允许方法在不阻塞线程的情况下等待。它通过将方法重写到状态机中来实现这一点,每个
wait
实际上都变成了
return
。谢谢Stephen。这意味着这一切都是关于线程的。因此,在您的注释“方法正在等待GetCityIdbynameAscync返回的任务完成”中,这里的方法正在等待意味着主线程正在等待?我知道如果我使用wait,那么UI不会像同步调用那样被阻塞/冻结。但在同步和异步模式下,它都会等待前面的工作完成,对吗?@SandipAgrawal:No;方法等待,而不是线程。这就是
async
:它允许方法在不阻塞线程的情况下等待。它通过将方法重写到状态机中来实现这一点,并且每个
wait
实际上成为
返回。
private async Task<string> GetStateInfo()
{
   var cityId = await GetCityIdByNameAsync("Delhi");
   var state = await GetStateNameAsync(cityId);
   return state;
}