Async wait 实际上是阻塞调用吗?

San*_*wal 4 c# async-await

private async Task<string> GetStateInfo()
{
   var cityId = await GetCityIdByNameAsync("Delhi");
   var state = await GetStateNameAsync(cityId);
   return state;
}
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ary 6

请参阅我的异步介绍await是“异步等待”,因此它“暂停”该方法并返回一个不完整的Task<string>实例。因此该方法正在等待返回的任务GetCityIdByNameAsync完成,但没有线程阻塞等待它。

  • @SandipAgrawal:不;*方法*等待,而不是线程。这就是“async”的全部要点:它允许“方法”等待而不阻塞线程。它通过将方法重写到状态机中来实现这一点,并且每个“await”实际上变成一个“return”。 (3认同)