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

一文吃透 C#中异步编程Task

一文吃透 C#中异步编程Task

  • 一、Task 是什么
  • 二、推荐使用场景
  • 三、Demo:Task 的核心用法
    • 1. 最常用的启动方式Task.Run
    • 2. task完成状态与结果获取
    • 3. 多个任务怎么等?Wait/WaitAll/WaitAny
    • 4. 任务想中途停掉?取消与异常处理
  • 四、必备 API 速查表
  • 五、避坑指南、注意事项
  • 总结

一文吃透 C#中异步编程Task

一、Task 是什么

Task 是 C# 中用于处理异步操作的类,从.NET Framework 4 开始引入。它不像 Thread 需要手动管理线程生命周期,而是基于线程池自动调度,轻量又好控制。Task的关键特点:

  • 异步执行:在后台线程执行,不阻塞主线程
  • 状态可控制:能随时知道任务是 “正在跑”、“已完成” 还是 “被取消”
  • 支持返回值:能返回操作结果,方便后续使用

二、推荐使用场景

Task 虽好,但并非所有场景都适用。以下场景适合发挥它的优势:

  • 复杂计算:如图像处理、数据分析这类耗时操作,放到 Task 里在后台执行,不影响用户操作界面
  • 多任务并行:同时执行多个独立任务,像同时下载多个文件,每个下载任务用一个 Task,提高整体效率
  • 后台任务:如定期清理缓存、日志记录等后台操作,适合用 Task 在后台默默执行

三、Demo:Task 的核心用法

1. 最常用的启动方式Task.Run

  • 不用手动创建线程,Task 会自动从线程池拿资源(线程池无空闲线程时会自动创建)
  • 适合大多数简单异步场景,推荐优先使用
static void BasicTaskDemo()
{// 用Task.Run启动一个任务,自动在后台执行Task.Run(() => {Thread.Sleep(500);   // 模拟耗时操作Console.WriteLine($"BasicTaskDemo Task End,线程ID: {Thread.CurrentThread.ManagedThreadId}"); }); // Task<int> task = Task.Run(() => 100 + 200); /返回值
} 

2. task完成状态与结果获取

  • 结果已知或同步可得,优先用 FromResult 包装为 Task,避免不必要的线程调度和等待
  • 若需异步计算,使用 Task.Run 或其他异步方式,Result会阻塞当前线程
static string Now() => DateTime.Now.ToString("HH:mm:ss.fff"); 
static void FromResultDemo()
{// 场景1:Task.FromResult:创建已完成的任务,立即可用,仅仅是把已知结果包装为Task(不耗时)Task<int> fromResultTask = Task.FromResult(123); Console.WriteLine($"{Now()} fromResultTask 已完成: IsCompleted={fromResultTask.IsCompleted}, Result={fromResultTask.Result}"); // 场景2:需要异步计算,用Task.RunTask<int> runTask = Task
http://www.xdnf.cn/news/1453807.html

相关文章:

  • 鸿蒙权限崩溃:网络文件访问全攻略
  • CentOS系统如何查看当前内存容量
  • android View详解—View的刷新流程源码解析
  • 惊!printf 不往屏幕输?都是 fd 在搞鬼!爆肝拆解 Linux 文件描述符 + 重定向底层,学会直接在终端横着走
  • STM32-UART-中断
  • Qt QJsonObject
  • 数据库集成:使用 SQLite 与 Electron
  • uni 拍照上传拍视频上传以及相册
  • jenkins调用ansible部署lnmp平台-Discuz论坛
  • Java 流程控制:从入门到面试的全方位指南
  • C语言(长期更新)第14讲:指针详解(四)
  • 【图像处理基石】如何在频域对图像进行处理和增强?
  • VSCode中的扩展Extension说明
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(2)
  • 深度学习:ResNet 残差神经网络详解
  • C++ 面试高频考点 力扣 153. 寻找旋转排序数组中的最小值 二分查找 题解 每日一题
  • 2025年GEO优化供应商盘点:五大实力派助您抢占AI搜索先机
  • 大数据框架对比与选择指南
  • Vulkan计算着色器中Dispatch、workGroups、invocation之间的关系
  • Docker(③MobaXterm连接WSL Ubuntu)
  • Flowable——流程定义与部署(RepositoryService)
  • Gamma AI:AI演示文稿制作工具,高效解决PPT框架搭建难与排版耗时问题
  • C# HTTP请求最佳实践
  • 关于亚马逊账号关联的新思考——账号注册注意事项
  • 基于单片机矿井安全检测/煤矿环境安全监测设计
  • Vue 3 学习路线指南
  • NVIDIA Jetson 开发板使用
  • IBM穿孔卡片:现代计算技术的奠基之作
  • 第11章 分布式构建
  • 20.36 QLoRA微调实测:59%显存暴降+3倍提速,95%性能保留惊呆业界!