栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

导致死锁的异步/等待示例

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

导致死锁的异步/等待示例

看一下这个例子,Stephen为您提供了一个清晰的答案:

因此,这是从顶级方法(

Button1_Click
对于UI /
MyController.Get
对于ASP.NET)开始的事情:

  1. 顶级方法调用

    GetJsonAsync
    (在UI / ASP.NET上下文中)。

  2. GetJsonAsync
    通过调用
    HttpClient.GetStringAsync
    (仍在上下文中)启动REST请求。

  3. GetStringAsync
    返回uncompleted
    Task
    ,指示REST请求未完成。

4.

GetJsonAsync
等待的
Task
归还
GetStringAsync
。上下文被捕获,以后将用于继续运行该
GetJsonAsync
方法。
GetJsonAsync
返回uncompleted
Task
,指示该
GetJsonAsync
方法不完整。

  1. 顶级方法同步阻止

    Task
    返回的
    GetJsonAsync
    。这将阻塞上下文线程。

  2. …最终,REST请求将完成。这样就完成了

    Task
    由返回的
    GetStringAsync

  3. GetJsonAsync
    现在,可以继续运行for的延续,它等待上下文可用,以便可以在上下文中执行。

  4. 死锁
    。顶级方法正在阻止上下文线程,等待

    GetJsonAsync
    完成,并且
    GetJsonAsync
    正在等待上下文空闲以便可以完成。对于UI示例,“上下文”是UI上下文。对于ASP.NET示例,“上下文”是ASP.NET请求上下文。这种死锁可能是由于“上下文”引起的。

您应该阅读另一个链接: 等待,UI和死锁! 天啊!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号