C# 多线程 Task TPL任务并行

news/2025/1/17 3:49:48/

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

相关文章

Rust中的Rc. Cell, RefCell

引用计数Rc 概述: Rc是Rust中用于实现引用计数的类型,它允许多个所有者共享同一个数据。 用法详解: 每当clone一个Rc时,引用计数增加,而每当一个Rc退出作用域时,引用计数减少。当引用计数变为0时&#x…

OpenSeaOtter使用手册-安装

OpenSeaOtter是一个易于安装和使用的容器镜像仓库,是现实了docker registry api v2版本。 OpenSeaOtter包含以下步骤: 下载最新二进制版本初始化配置安装linux服务启动服务接入到OpenLinkSaas项目中(可选步骤)创建验证密钥创建镜像分组 下载 你可以从 GitCode - 全球…

Open FPV VTX开源之第一次出图

Open FPV VTX开源之第一次出图 1. 源由2. 连线2.1 飞控2.2 调试 3. serial3.1 启动log - uboot3.2 登录版本 - linux3.3 获取有线IP 4. linux4.1 ssh登录4.2 tfCard 5. PixelPilot出图6. 总结7. 参考资料8. 补充8.1 8812AU网卡8.2 DEBUG串口部分乱码8.3 偶尔启动卡住8.4 花屏、…

深入浅出:React 前端框架解析与应用

引言 随着前端开发技术的不断发展,现代化的前端框架成为了提升开发效率、优化用户体验和构建复杂应用的关键工具。在众多的前端框架中,React凭借其简洁、高效、可扩展的特点,已成为目前最流行的前端框架之一。它由Facebook于2013年发布&…

游戏引擎学习第77天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾昨天的 bug 今天我们继续开发进度,进行调试昨天代码的问题,主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏,但我们希望能够处理多层的房间,玩家…

STM32 FreeRTOS时间片调度---FreeRTOS任务相关API函数---FreeRTOS时间管理

目录 时间片调度简介 FreeRTOS任务相关API函数介绍 延时函数介绍 时间片调度简介 在FreeRTOS中,同等优先级的任务会轮流分享相同的CPU时间,这个时间被称为时间片。在这里,一个时间片的长度等同于SysTick中断的周期。 FreeRTOS任务相关API…

C++实现设计模式---备忘录模式 (Memento)

备忘录模式 (Memento) 备忘录模式 是一种行为型设计模式,它允许在不破坏封装的前提下,捕获和恢复对象的内部状态。通过备忘录模式,可以在程序运行时存储某个对象的历史状态,并在需要时恢复。 意图 提供一种方法,在不…

ansible 检查目录大小

检查目录大小 worker_du.yml# ansible-playbook -i hosts worker_du.yml --limit w10 --- - name: 检查目录大小hosts:- w10 # 可以根据需要修改目标主机# 可以添加更多主机tasks:- name: 获取每台主机 /root/worker01 目录大小shell: du -sh /root/worker01/ | awk {print …