C# 多线程 Task TPL任务并行

ops/2025/1/16 21:04:14/

先总结一下 之前发展过程的要点
1: 为了保证多线程正确顺序执行 线程同步
2:== 为了节省操作系统线程资源 线程池 异步 方式管理==

正常来讲 使用这俩个要点 进行使用 多线程可以满足开发使用需求
但是 新的问题产生了
那就是 多个异步操作 需要编写大量的代码 控制线程同步以及异步结果处理逻辑
为了 解决这种情况 ==Task ==来了

Task 也就是 TPL 任务并行库 其实可以理解为 对这个 线程池异步方式一个更抽象的表达
一种隐藏细节的封装,以任务的方式来 替代 异步操作线程之间的交互并且提供相应的api去使用

而大多数情况 对于程序开发而言 对于 线程异步处理具体实现是不需要关注的,关注的是业务的执行逻辑,也就是说 Task的目的很明确 封装底层实现 让程序员更关注业务逻辑层,只需要合理使用Task的方式 确保逻辑上的正确即可,而不是专注在异步操作线程大量代码中

接下来 就是主要讲如何使用Task 的 api

  1. 创建任务 不再是thread类的方式了 有专门的Task类 有3种创建 task.run() \task.factory.startnew()\new task().start()
    正常来讲这种方式创建的线程 都是 属于 线程池 后台线程 如果有 长时间操作的
    也可以通过 Task.Factory.StartNew(() => TaskMethod(“长时间复杂操作单独线程”), TaskCreationOptions.LongRunning); 来设置 单独一个线程
    也可以 task.RunSynchronously();
  2. 阻塞线程 之前通过 join 或者 锁 信号量等 来线程同步 主线程或者子线程之间
    task 的话 可以通过 task.result 来 代替join
  3. 组合任务
    task.ContinueWith 设置执行完之后执行操作
    4.子线程中在创建子线程 必须在 运行时 就先创建 子线程并附加给 父子线程
    5.取消任务 还是老方法 CancellationTokenSource cancle 然后 根据token.IsCancellationRequested 去判断 值得注意的是 如果在 task start之前就有可能存在取消操作 所以需要 var Task = new Task(() => TaskMethod(“Task”, cts.Token), cts.Token); 底层任务传递一次取消标志,然后给任务构造函数再传递一次 那么在取消之后进行start 就会拦住报错 异常 不会进行执行去影响

http://www.ppmy.cn/ops/150637.html

相关文章

【认识油管头部频道】ep3 “PewDiePie”——游戏内容

PewDiePie(本名 Felix Kjellberg)是世界上最知名的 YouTuber 之一,以其独特的内容风格、个性魅力和对观众的深刻理解而闻名。他的成功是多方面因素共同作用的结果,以下是 PewDiePie 火爆的主要原因: 1. 游戏领域的早期…

MyBatis——XML映射文件

在MyBatis中,既可以通过注解的方式配置SQL语句,也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句: Delete("delete from user where id#{id}") Integer deleteById(Integer id);但是…

40,【6】CTFHUB WEB SQL MYSQL数据库

进入靶场 12时回显异常,可知是整数型注入 order by判断字节数 使用order by 判断出字节数为3 使用union select 寻找回显点 database爆出了库名 表名有2个,news和qctclblljo,看不出来flag在哪个文件里,都看看 第2个更可疑一点,&a…

《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(28):DSA数字签名

《深入浅出HTTPS​​​​​​​​​​》读书笔记(28):DSA数字签名 对称加密算法有很多算法,标准算法是RSA机密算法,数字签名技术也有一个标准DSS(Digital Signature Standard),其标准…

npm更换淘宝镜像源

新的淘宝npm镜像源地址:https://registry.npmmirror.com npm更换淘宝镜像源 npm config set registry https://registry.npmmirror.com 然后再执行以下操作查看是否成功 npm config get registry 如果没安装过淘宝镜像源的,则直接安装 npm install -…

《零基础Go语言算法实战》【题目 4-7】实现链表的排序

《零基础Go语言算法实战》 【题目 4-7】实现链表的排序 请用 Go 语言实现合并 K 个排序的链表并将其作为一个排序链表返回。 【解答】 ① 思路。 借助分治算法的思想,递归对比两个链表中的每个元素的值的大小,然后将 K 个有序链 表两两合并即可。 …

【数字化】华为-用变革的方法确保规划落地

导读:华为在数字化转型过程中,深刻认识到变革的必要性,并采用了一系列有效的方法确保转型规划的有效落地。华为认为,数字化转型不仅仅是技术层面的革新,更是企业运作模式、流程、组织、文化等深层次的变革。数字化转型…

AWS云计算概览(自用留存)

目录 一、云概念概览 (1)云服务模型 (2)云计算6大优势 (3)web服务 (4)AWS云采用框架(AWS CAF) 二、云经济学 & 账单 (1)定…