【问题标题】:Is Async await Actually a blocking call?Async await 实际上是阻塞调用吗?
【发布时间】:2021-02-19 10:10:53
【问题描述】:
private async Task<string> GetStateInfo()
{
   var cityId = await GetCityIdByNameAsync("Delhi");
   var state = await GetStateNameAsync(cityId);
   return state;
}

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

【问题讨论】:

    标签: c# async-await


    【解决方案1】:

    请看我的async introawait 是一个“异步等待”,因此它“暂停”该方法并返回一个不完整的 Task&lt;string&gt; 实例。所以方法正在等待GetCityIdByNameAsync返回的任务完成,但是没有线程阻塞在等待。

    【讨论】:

    • 谢谢斯蒂芬。所以这意味着这一切都与线程有关。因此,在您的评论“所以该方法正在等待 GetCityIdByNameAsync 返回的任务完成”中,这里的方法正在等待意味着主线程正在等待?我知道如果我使用 await 那么 UI 不会像同步调用那样被阻塞/冻结。但是在同步和异步中,它都在等待之前的工作完成,对吗?
    • @SandipAgrawal:不; 方法 等待,而不是线程。这就是async 的重点:它允许方法 等待而不阻塞线程。它通过将方法重写为状态机来实现这一点,每个await 实际上变成了return
    猜你喜欢
    • 1970-01-01
    • 2018-05-16
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多