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

C# Task

  • 以下是 `Task` 类的一些关键特性和用法:
  • 以下是一些使用 `Task` 的示例:
    • 创建并启动一个任务
    • 使用 `await` 等待任务完成
    • 处理任务异常
    • 使用 `Task<TResult>` 获取结果
    • 取消任务
  • 总结

C#中, TaskSystem.Threading.Tasks 命名空间中的一个类,它代表了 异步操作 的执行。 Task 类是异步编程模型的核心,它允许开发者编写非阻塞的代码,提高应用程序的响应性和性能。

以下是 Task 类的一些关键特性和用法:

  • 表示异步操作:Task 表示一个可能已经完成、正在运行或尚未开始的异步操作。

  • 返回值:Task<TResult>Task 的泛型版本,它表示一个异步操作,该操作将返回一个指定类型的结果。

  • 状态跟踪:Task 对象提供了属性来跟踪其状态,如 StatusIsCompletedIsFaulted 等。

  • 异常处理:如果异步操作中发生异常,Task 对象的 Exception 属性将包含异常信息。

  • 等待完成:可以使用 await 关键字或 Task.Wait()Task.Result 方法来等待 Task 完成。

  • 取消支持:Task 支持使用 CancellationToken 来取消操作。

  • 连续性:可以使用 ContinueWith 方法来安排在任务完成后执行的连续任务。

  • 并行执行:Task 可以与其他任务并行执行,使用 Task.WhenAllTask.WhenAny 来管理多个任务的完成。

以下是一些使用 Task 的示例:

创建并启动一个任务

// 创建并启动一个任务
Task task = Task.Run(() => 
{Console.WriteLine("Task is running on thread: " + Thread.CurrentThread.ManagedThreadId);
});
// 等待任务完成
task.Wait();

使用 await 等待任务完成

public async Task DoWorkAsync()
{await Task.Run(() => {// 模拟长时间运行的任务Thread.Sleep(1000);Console.WriteLine("Work is done.");});
}

处理任务异常

public async Task DoWorkWithExceptionAsync()
{try{await Task.Run(() => {throw new InvalidOperationException("Something went wrong!");});}catch (Exception ex){Console.WriteLine($"Caught an exception: {ex.Message}");}
}

使用 Task<TResult> 获取结果

public async Task<int> GetResultAsync()
{return await Task.Run(() => {// 模拟计算过程return 42;});
}

取消任务

public async Task CancelTaskAsync(CancellationToken cancellationToken)
{var task = Task.Run(() =>{while (!cancellationToken.IsCancellationRequested){// 模拟长时间运行的任务}}, cancellationToken);await Task.Delay(100); // 模拟一段时间后取消任务cancellationToken.Cancel();await task;
}

总结

Task 类是.NET异步编程的基础,它提供了一种简单而强大的方式来编写和组织异步代码。

http://www.lryc.cn/news/370354.html

相关文章:

  • 进口电动蝶阀的工作原理-美国品牌
  • Exploring Performance and Cost Optimization with ASIC-Based CXL Memory——论文阅读
  • 计算机网络(4) 最长前缀匹配(路由转发表)
  • 向https地址发送请求失败报错
  • 生信技能47 - Shell程序和R程序并行执行处理方法
  • java+SimpleRegression 线性模型,针对采集到的大数据设备温度,对设备温度做出预测
  • 面对失业,不得不做出改变了
  • MT2093 活动安排
  • 动态javaweb 建立-准备阶段
  • web前端网页设计参考:深度剖析与设计思路探索
  • node使用http-proxy-middleware做代理,解决跨域问题
  • 爱奇艺视频怎么转换成mp4格式,爱奇艺qsv转换mp4最简单方法
  • HandyControl的属性编辑器如何绑定自定义控件,并集成到自定义编辑器
  • 【Python】使用 Python 检测图像中(色差对比度较大)的水印
  • 最短路:Bellman-Ford
  • 深度学习的分类网络
  • Si24R05—高度集成的低功耗 2.4G+125K SoC 芯片
  • layuimini框架实现点击菜单栏回到起始页
  • 【ubuntu22.04~mysql-MHA-mycat】
  • Java Reflection 反射使用 完全指南
  • 2024年适合学生写作业的台灯推荐:五款公认好用的护眼台灯
  • 电商平台API电商平台数据传输(商品订单店铺数据采集)
  • 【LeetCode每日一题】3067. 在带权树网络中统计可连接服务器对数目-DFS和图
  • java中的时间相关类
  • 大模型的现状与未来:探索腾讯元宝APP及其他AIGC产品
  • 记录一个apisix修改后台接口超时时间的方法
  • 地产样板间vr全景云展平台降低售房压力
  • 性能测试2【搬代码】
  • Chromium源码阅读:深入理解Mojo框架的设计思想,并掌握其基本用法(1)
  • 通用大模型VS垂直大模型对比