当前位置: 首页 > article >正文

C#里await Task.Run死锁的分析与解决

一段如下的代码,它是必然死锁的:

        private  void button1_Click(object sender, EventArgs e)
        {
            Task<string> res =  GetResAsync();
            textBox1.Text =  res.Result;
        }
        private async Task<string> GetResAsync()
        {
            string t = await Task.Run(() => {
                Thread.Sleep(1000);
                return "返回结果1";
            });
            return t;
        }

在这段代码里,GetResAsync()函数是使用await Task.Run来等线程任务执行返回一个字符串结果。
因此在textBox1.Text =  res.Result里想获取结果显示。
那么就需要执行res.Result。
执行res.Result时,需要等线程执行结果,它采用一个wait函数等线程完成。
因为在前面await Task.Run已经在等线程去执行,这时就会造成死锁。

要解决上述的问题,只有两


http://www.kler.cn/a/510527.html

相关文章:

  • tui-editor报错
  • Spring Boot 集成 MongoDB:启动即注入的便捷实践
  • 通过图形界面展现基于本地知识库构建RAG应用
  • 记录node-sass无法安装的问题
  • 《AI赋能光追:开启图形渲染新时代》
  • Rust:指针 `*T` 和引用 `T`的区别
  • 【错误解决方案记录】spine3.8.75导出的数据使用unity-spine3.8插件解析失败报错的解决方案
  • 知识库管理系统的用户体验之道:便捷、高效、智能
  • PyTorch 基础数据集:从理论到实践的深度学习基石
  • 洛谷P1807 最长路(拓扑排序)
  • 【MySQL索引:B+树与页的深度解析】
  • 将n变为一个可以被表示为2^{a}+2^{b}的正整数m
  • ChatGPT Task功能初探
  • 机器学习和深度学习的概念
  • Simple Live (直播聚合应用:斗鱼、虎牙、哔哩哔哩、抖音)
  • Sealos 将计算节点加入 kubeadm 安装的 Kubernetes 集群
  • Linux 查看目录下的文件夹命令与 find 查找某个目录但不包括该目录本身
  • 美食推荐系统 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离
  • 019:什么是 Resnet50 神经网络
  • Web前端------表单标签
  • 青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据
  • 3.14 掌握 Token 数量计算:使用 Tiktoken 轻松了解模型输入输出
  • 【新人系列】Python 入门(二十七):Python 库
  • opentelemetry-collector docker安装
  • 游戏引擎学习第84天
  • Linux stress-ng命令解读