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

C# 多线程 Task TPL任务并行

先总结一下 之前发展过程的要点
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.lryc.cn/news/521713.html

相关文章:

  • 【matlab】matlab知识点及HTTP、TCP通信
  • kalilinux - msf和永恒之蓝漏洞
  • 网络安全测评质量管理与标准解读
  • Cesium根据地图的缩放zoom实现不同级别下geojson行政边界的对应展示
  • Linux初识:【shell命令以及运行原理】【Linux权限的概念与权限管理】
  • 深入剖析 Wireshark:网络协议分析的得力工具
  • 【AIGC】SYNCAMMASTER:多视角多像机的视频生成
  • PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统
  • Redisson中红锁(RedLock)的实现
  • 小结:路由器和交换机的指令对比
  • 使用yarn命令创建Vue3项目
  • Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)
  • K8S集群常用命令
  • 【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)
  • mayavi -> python 3D可视化工具Mayavi的安装
  • 【C++】B2112 石头剪子布
  • 【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度
  • C# 25Dpoint
  • 如何制作一个高质量的 Dockerfile 镜像:从入门到实践
  • Linux 机器学习
  • 青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据
  • css实现响应式详解
  • python-应用自动化操作方法集合
  • mac地址是用来做什么的
  • 【Compose multiplatform教程】05 IOS环境编译
  • 3D滤波器处理遥感tif图像
  • fisco bcosV3 Table智能合约开发
  • leetcode刷题记录(四十八)——128. 最长连续序列
  • HTML中如何保留字符串的空白符和换行符号的效果
  • Linux入门——环境基础开发(上)