Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >async 与 Thread 的错误结合

async 与 Thread 的错误结合

作者头像
newbe36524
发布于 2023-08-23 08:20:20
发布于 2023-08-23 08:20:20
20100
代码可运行
举报
运行总次数:0
代码可运行

在 TAP 出现之前,我们可以通过 Thread 来完成一些线程操作,从而实现多线程和异步操作。在 TAP 出现之后,有时候为了更高精度的控制线程,我们还是会使用到 Thread 。文本讲介绍一种错误的使用方式,作为读者的一个参考。

和 TaskCreateOptions.LongRunning 类似

不应该尝试使用 Thread 执行类似的异步操作。因为这浪费了开启线程的花销。

有的时候,你可能会这么写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var thread = new Thread(async () =>
{
    while (true)
    {
        // do something
        await Task.Delay(1000);
    }
}){
    IsBackground = true
};
thread.Start();

但其实,这是个错误的写法。

IDE 提示

和 TaskCreateOptions.LongRunning 略有不同,采用这种写法,IDE 会给出一个提示,表明希望取消 async 关键字。因为实际上

  1. Thread 的所有重载中并没有支持 Task 相关的重载。
  2. async void 除了在 event handler 中使用,其他地方都是不推荐的。

所以这种做法实际上并不推荐。

而 TaskFactory.StartNew() 的重载中,由于存在一个 Func<T> 的重载,所以导致虽然这种这种使用方式错误,却被 IDE 所接受。

所以这里其实就可以总结一个简单的规则:当考察一组 API 是否原生支持 TAP 操作的时候,应该查看这组 API 中是否存在 Task 相关的重载。如果没有,那么说明原生并不能良好支持,如果使用则可能会出现意外的情况

同样的,当我们自己在设计 API 的时候也应该参考该原则,对于自己希望支持 TAP 的 API,应该提供 Task 相关的重载。

昙花线程

在 thread async void 其实上只是一个很小的问题。这个错误的关键还是造成了一个昙花线程。

我们通过以下代码来验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var thread = new Thread(async () =>
{
    while (true)
    {
        // do something
        await Task.Delay(1000);
    }
}){
    IsBackground = true
};
thread.Start();

Thread.Sleep(3000);

Console.WriteLine("thread is alive: " + thread.IsAlive);
// thread is alive: False

这里我们可以看到,thread.IsAlive 的值为 False。这是因为,我们在 thread 中使用了 await 关键字,在 await 之后的代码,实际上是在另一个 ThreadPool 中的线程中执行的。而我们的 thread 本身在 await 之后就已经结束了。于是我们就得到了一个昙花一现的线程。

而这种昙花线程无疑就是一种浪费。

如何观测线程的生命周期

其实大体的内容我们已经讲完了。但为了凑一下篇幅,我们着重演示一下如何使用 Rider 来观测线程的生命周期。

首先我们在 Rider 中创建一个单元测试项目,然后在其中创建一个单元测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Test]
public void Test1()
{
    var t1 = new Thread(async () =>
    {
        while (true)
        {
            // do something
            await Task.Delay(1000);
        }
    })
    {
        IsBackground = true,
        Name = "t1"
    };
    t1.Start();

    var t2 = new Thread(() =>
    {
        while (true)
        {
            // do something
            Thread.Sleep(1000);
        }
    })
    {
        IsBackground = true,
        Name = "t2"
    };
    t2.Start();

    Thread.Sleep(3000);
}

然后我们在 Rider 中按照下图选择 Profile 选项:

然后选择 Profile Unit Tests 选项:

稍等片刻之后,我们就可以双击下图中的报告,来查看线程的生命周期:

在查看界面中,我们可以通过线程下来框来查看线程运行所花费的时间:

如果上图,我们可以很直接的看到,t1 线程的生命周期可以说是瞬间就结束了,因为第一次 await 之后,线程就结束了。

总结

在本文中,我们演示了一种错误的使用方式,以及如何使用 Rider 来观测线程的生命周期。

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
行业新知 | DeepSeek在医疗领域的典型应用场景
DeepSeek作为一款高效的深度学习模型,凭借其多模态处理能力、混合专家(MoE)架构、动态参数激活等技术创新,在医疗领域展现出广泛的应用潜力。
AIGC新知
2025/02/26
2.2K0
行业新知 | DeepSeek在医疗领域的典型应用场景
178页,128个案例,GPT-4V医疗领域全面测评,离临床应用与实际决策尚有距离
在大型基础模型的推动下,人工智能的发展近来取得了巨大进步,尤其是 OpenAI 的 GPT-4,其在问答、知识方面展现出的强大能力点亮了 AI 领域的尤里卡时刻,引起了公众的普遍关注。
机器之心
2023/11/07
2910
178页,128个案例,GPT-4V医疗领域全面测评,离临床应用与实际决策尚有距离
数字人:开启医疗领域的智慧变革新时代(5/10)
数字人,作为医疗领域变革的基石,正逐渐崭露头角。它是基于数字成像技术的虚拟人,源自真实人体的三维建模 ,具备类似人类的多种能力,如说话表达、面部表情、肢体动作等,这些能力使得数字人在医疗领域拥有无限的应用潜力。
正在走向自律
2025/04/15
1700
数字人:开启医疗领域的智慧变革新时代(5/10)
【AIGC篇】医疗健康遇上 AIGC:潜力裂变,开启智慧医疗奇幻之旅
在当今数字化时代,人工智能生成内容(AIGC)正以前所未有的速度渗透到各个领域,医疗健康行业也不例外。AIGC 为智慧医疗带来了创新性的变革,其潜力正在不断裂变,引领我们走向一个充满奇幻色彩的医疗新时代。
羑悻的小杀马特.
2025/01/23
1850
【AIGC篇】医疗健康遇上 AIGC:潜力裂变,开启智慧医疗奇幻之旅
深度剖析!大模型在医疗行业的部署应用技巧与案例对比
嘿,医疗科技爱好者们!在这个科技飞速发展的时代,大模型就像一个超级英雄,强势闯入医疗行业,给这个传统又充满挑战的领域带来了无限可能🎇。今天,咱们就来好好深度剖析一下大模型在医疗行业的部署应用技巧,再通过一些超有趣的案例对比,看看它到底是如何 “大显神通” 的!
小白的大数据之旅
2025/05/10
870
深度剖析!大模型在医疗行业的部署应用技巧与案例对比
这15个医疗机器人,可能会让医生失业
镁客网导读:随着AI+医疗的进一步融合、深入,适用于细分医疗领域的AI辅助技术也在不断加强。服务机器人多个应用场景中,医疗必然是最重要之一。这不是简单的科技辅助,而是成为治疗环节的一部分,它们的角色开始转为“医组成员”,它们会测量患者的脉搏、扫描生命体征、阅读病例记录甚至进行手术。
镁客网
2018/10/18
5170
全球首场神经影像人机对决:AI战胜25位医界“最强大脑”!
【新智元导读】昨天,备受关注的全球首场神经影像人机大战在国家会议中心举行,在脑肿瘤和脑血管影像判读比赛中,医疗AI最终以高出20%的准确率战胜25名人类医生。如果这款AI产品投入实用,核磁检查的出片速度将从现在的几天缩短至几分钟。
新智元
2018/07/31
3830
全球首场神经影像人机对决:AI战胜25位医界“最强大脑”!
【愚公系列】《高效使用DeepSeek》031-医疗健康预检
📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主!
愚公搬代码
2025/04/04
1360
用机器学习检测出诱发痴呆和中风的最常见病因,比现有方法更准确
机器学习在最常用的脑部扫描(CT)形式中检测出诱发痴呆和中风的最常见病因,比现有方法更准确。
AiTechYun
2018/07/27
2680
用机器学习检测出诱发痴呆和中风的最常见病因,比现有方法更准确
FPGA国内”薪“赛道-在医疗领域的应用
从下游应用市场来看,通信和工业市场份额位居FPGA芯片一二位,同时通信市场份额有望持续提升。但是目前通信和工业市场趋于稳定,FPGA厂商一直推AI市场,但是AI市场目前被ASIC和显卡牢牢占据,FPGA被市场上认可度也不高。
碎碎思
2024/06/18
3700
FPGA国内”薪“赛道-在医疗领域的应用
中国首款智能显微镜获批进入临床:病理诊断AI化,腾讯AI Lab打造
据介绍,该智能显微镜产品研发始于 2018 年,集成了目前病理分析与诊断方面的最新技术,并针对病理医生工作流程和习惯进行多次产品迭代,现已支持乳腺癌免疫组化(IHC)Ki67(肿瘤细胞增殖指数)、ER(雌激素受体)、PR(孕激素受体)和 Her2(细胞表面生长因子 2)等常用核染色和膜染色量化分析场景的判读。
机器之心
2020/04/14
3880
中国首款智能显微镜获批进入临床:病理诊断AI化,腾讯AI Lab打造
我国“神经疾病人工智能研究中心”成立
新华网北京12月22日电(刘映)“未来,人工智能的机器人可以帮助查房、诊断、手术、护理,运用到医疗领域的方方面面,而最复杂的‘人脑’疾病也将由‘电脑’给出精确诊断,并提供最佳的治疗和预后方案。”12月22日,神经病学专家、国家神经系统疾病临床医学研究中心副主任、天坛医院常务副院长王拥军教授描绘了人工智能将在医疗领域带来的变革。当日,全球首家“神经疾病人工智能研究中心”在北京天坛医院挂牌成立。“人工智能应用在神经疾病预防、诊疗、预后和康复等阶段,都有无可比拟的优越性,未来将在神经疾病医疗领域带来一场颠覆性的技
企鹅号小编
2018/01/31
5860
我国“神经疾病人工智能研究中心”成立
医疗智能体:Python 构建基于多模态数据的疾病诊断专家系统
嘿,各位技术爱好者们!今天咱要一头扎进一个超酷的领域 —— 医疗智能体。想象一下,有这么一个神奇的 “智能医生”,它能像超级侦探一样,综合各种不同类型的信息,快速又准确地诊断疾病。是不是感觉像科幻电影里的情节?但实际上,通过 Python 编程,我们正一步步将这个神奇的场景变为现实!今天,我们就来揭开这个神秘面纱,看看如何用 Python 构建基于多模态数据的疾病诊断专家系统。
小白的大数据之旅
2025/03/20
2340
医疗智能体:Python 构建基于多模态数据的疾病诊断专家系统
斩获2019 Thales AIChallenge4Health第一,腾讯优图医疗AI再获突破
近日,腾讯优图实验室医疗AI再获新突破。由腾讯优图研发的医疗AI系统——医疗器械校准中的超高精度关键点检测方法,从二百余支队伍中脱颖而出,在2019 Thales AIChallenge4Health中斩获第一,检测精度达到国际领先水平。该比赛由全球市占率超过50%的放射治疗方案提供商Thales公司主办,共吸引来自全世界的201支队伍注册参与(其中40支队伍提交了最终结果)。 (图示:AIChallenge4Health竞赛排名截图。因为空间限制,只显示前11名) CT、X光等医学影像技术是实际
腾讯技术工程官方号
2019/07/15
4960
斩获2019 Thales AIChallenge4Health第一,腾讯优图医疗AI再获突破
AI在医疗保健领域:突破界限,救治生命
人工智能(AI)正在医疗保健领域取得巨大的突破,不仅改善了诊断和治疗的准确性,还提高了医疗保健的效率和可及性。本文将深入探讨AI在医疗保健领域的应用,包括医学影像分析、疾病预测、个性化治疗和医疗数据管理等方面的突破和创新。通过适当的代码示例和深入分析,我们将看到AI如何在医疗保健领域挽救生命并推动医学科学的进步。
IT_陈寒
2023/12/13
4240
AI在医疗保健领域:突破界限,救治生命
AI 在医疗影像领域的前景
聊起 AI,画面都充斥着机械语言:精密高级的芯片,光怪陆离的智能产业……你眼中的 AI 有什么样的能力?能给传统行业带来哪些变革与发展?基于此,云加社区联手知乎科技,从知乎AI 与传统行业相关话题中精选内容落地社区专题「 AI 与传统行业的融合 」。
腾讯云开发者社区
2020/04/14
3.1K0
【前沿】自动从CT医疗影像中生成诊断报告,卡内基梅隆大学CMU邢波教授团队最新基于深度学习的医疗影像研究成果
【导读】CMU邢波(Eric Xing)团队最近在arXiv上发布新论文,采用深度学习方法自动地从CT医疗影像中生成诊断报告,大大提高医生诊疗效率。写作报告对经验丰富的医生来说也是容易出错的,而且在人口高度密集的国家,写报告对医生来说无疑是费时和繁琐的。为了解决这些问题,其团队研究了医学影像报告的自动生成方法,以帮助医生更准确和有效地生成报告,未来可能对医疗领域产生重大影响。 邢波,生物和计算机双博士。 1988-1993年 清华大学物理学、生物学本科;1994-1999年 美国新泽西州立大学(Rutger
WZEARW
2018/04/11
2.6K0
【前沿】自动从CT医疗影像中生成诊断报告,卡内基梅隆大学CMU邢波教授团队最新基于深度学习的医疗影像研究成果
《C++与生物医学的智能融合:医疗变革新引擎》
在当今科技飞速发展的时代,人工智能正以前所未有的深度和广度渗透到各个领域,为传统行业带来革新与突破。其中,将 C++与生物学、医学等领域知识相结合,开发用于处理生物医学数据、辅助疾病诊断和治疗的人工智能应用,成为了极具潜力与挑战的前沿方向,正引发全球科技界与医疗界的高度关注。
程序员阿伟
2024/12/01
1010
《C++与生物医学的智能融合:医疗变革新引擎》
DeepSeek医疗影像诊断:从数据到模型的落地密码(8/18)
摘要:《DeepSeek医疗影像诊断:从数据到模型的落地密码南》通过详细介绍DICOM数据预处理规范、3D器官分割模型训练以及联邦学习保障数据隐私等方面的内容,为医疗影像诊断的实践提供了全面的指导。这些技术和方法的应用,不仅可以提高医疗影像诊断的准确性和效率,还可以有效保护患者数据的隐私,推动医疗影像诊断技术的发展和应用。
正在走向自律
2025/02/20
6390
DeepSeek医疗影像诊断:从数据到模型的落地密码(8/18)
17 | 使用PyTorch完成医疗图像识别大项目:理解业务
学习进入第二大部分,终于能够喘口气。接下来我们要做的是使用PyTorch来完成一个大项目,这个项目的目标是从医疗影像中检测癌症。这个题目听起来好像也不是那么难,像我们前面检测一张图片是鸟还是飞机,这个貌似也是个简单分类问题,给出的结果为是或者不是。但是当你真的深入到业务之中,你会发现完全不像你想的那么简单。我们先不那么着急往后看,所以这一节就比较轻松,没有什么代码,主要来把整个项目框架理清楚。
机器学习之禅
2022/07/11
8280
17 | 使用PyTorch完成医疗图像识别大项目:理解业务
推荐阅读
行业新知 | DeepSeek在医疗领域的典型应用场景
2.2K0
178页,128个案例,GPT-4V医疗领域全面测评,离临床应用与实际决策尚有距离
2910
数字人:开启医疗领域的智慧变革新时代(5/10)
1700
【AIGC篇】医疗健康遇上 AIGC:潜力裂变,开启智慧医疗奇幻之旅
1850
深度剖析!大模型在医疗行业的部署应用技巧与案例对比
870
这15个医疗机器人,可能会让医生失业
5170
全球首场神经影像人机对决:AI战胜25位医界“最强大脑”!
3830
【愚公系列】《高效使用DeepSeek》031-医疗健康预检
1360
用机器学习检测出诱发痴呆和中风的最常见病因,比现有方法更准确
2680
FPGA国内”薪“赛道-在医疗领域的应用
3700
中国首款智能显微镜获批进入临床:病理诊断AI化,腾讯AI Lab打造
3880
我国“神经疾病人工智能研究中心”成立
5860
医疗智能体:Python 构建基于多模态数据的疾病诊断专家系统
2340
斩获2019 Thales AIChallenge4Health第一,腾讯优图医疗AI再获突破
4960
AI在医疗保健领域:突破界限,救治生命
4240
AI 在医疗影像领域的前景
3.1K0
【前沿】自动从CT医疗影像中生成诊断报告,卡内基梅隆大学CMU邢波教授团队最新基于深度学习的医疗影像研究成果
2.6K0
《C++与生物医学的智能融合:医疗变革新引擎》
1010
DeepSeek医疗影像诊断:从数据到模型的落地密码(8/18)
6390
17 | 使用PyTorch完成医疗图像识别大项目:理解业务
8280
相关推荐
行业新知 | DeepSeek在医疗领域的典型应用场景
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验