C# Task详解

1、Task的优势

  ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:
  ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作;
  ◆ ThreadPool不支持线程执行的先后次序;
  以往,如果开发者要实现上述功能,需要完成很多额外的工作,现在,FCL中提供了一个功能更强大的概念:Task。Task在线程池的基础上进行了优化,并提供了更多的API。在FCL4.0中,如果我们要编写多线程程序,Task显然已经优于传统的方式。
  以下是一个简单的任务示例:

 View Code

2、Task的用法

  2.1、创建任务

  (一)无返回值的方式
  方式1:

  var t1 = new Task(() => TaskMethod("Task 1"));
  t1.Start();
  Task.WaitAll(t1);//等待所有任务结束 
  注:任务的状态:
  Start之前为:Created
  Start之后为:WaitingToRun 

  方式2:

  Task.Run(() => TaskMethod("Task 2"));

  方式3:

复制代码
复制代码
  Task.Factory.StartNew(() => TaskMethod("Task 3")); 直接异步的方法 
  //或者
  var t3=Task.Factory.StartNew(() => TaskMethod("Task 3"));
  Task.WaitAll(t3);//等待所有任务结束
  //任务的状态:
  Start之前为:Running
  Start之后为:Running
复制代码
复制代码

 

 View Code

  async/await的实现方式:

 View Code

  (二)带返回值的方式
  方式4:

  Task<int> task = CreateTask("Task 1");
  task.Start(); 
  int result = task.Result;

 

 View Code

    async/await的实现:

 View Code

  2.2、组合任务.ContinueWith

   简单Demo:

 View Code

   任务的串行:

 View Code

  子任务:

 View Code

  动态并行(TaskCreationOptions.AttachedToParent) 父任务等待所有子任务完成后 整个任务才算完成

 View Code

  2.3、取消任务 CancellationTokenSource

 View Code

  2.4、处理任务中的异常

  单个任务:

 View Code

  多个任务:

 View Code

    async/await的方式:

 View Code

  2.5、Task.FromResult的应用

 View Code

  2.6、使用IProgress实现异步编程的进程通知

  IProgress<in T>只提供了一个方法void Report(T value),通过Report方法把一个T类型的值报告给IProgress,然后IProgress<in T>的实现类Progress<in T>的构造函数接收类型为Action<T>的形参,通过这个委托让进度显示在UI界面中。

 View Code

  2.7、Factory.FromAsync的应用 (简APM模式(委托)转换为任务)(BeginXXX和EndXXX)

  带回调方式的

 View Code

  不带回调方式的

 View Code

 Task启动带参数和返回值的函数任务

 

 

转 https://www.cnblogs.com/zhaoshujie/p/11082753.html

posted @   dreamw  阅读(697)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2019-11-19 数据库优化方案整理
点击右上角即可分享
微信分享提示