1、引用空间
System.Threading.Task
2、定义
Task类可以更好的控制并行操作,任务表示将完成的某个工作单元,该工作单元可以在单独的线程运行,可以以同步方式启动一个新任务。
3、启动任务的方式
任务处理程序
public static void TaskMethod(string o){
Console.WriteLine(“进入任务处理程序”+o);
}
(1)、使用实例化的TaskFactory类,在其中将TaskMethod方法传递给StartNew方法
var tf=new TaskFactory();
Task t1=tf.StartNew(TaskMethod, “using task factory”);
(2)、使用Task类的静态属性Factory来访问TaskFactory,以及调用StartNew方法
Task t2=Task.Factory.StartNew(TaskMethod, “factory via a task”);
(3)、用Task类的构造函数实例化Task对象,调用Task类的Start方法启动任务
Task t3=new Task(TaskMethod, “using a task constructor and start”);
t3.Start();
(4)、调用Task类的Run方法启动任务
Task t4=Task.Run(()=>TaskMethod(“using run method”));
Run方法没有可传递Action委托的重载版本,但通过传递Action类型的lambda表达式并在其实现中使用参数。
4、同步任务
private static void RunSynchronousTask(){
TaskMethod(“just the main thread”);
var t1=new Task(TaskMethod, “run sync”);
t1.RunSynchronously();
}
5、使用单独线程的任务
如果任务代码长时间运行,可使用TaskCreationOptions.LongRunning告诉任务调度器创建一个新线程。
var t1=new Task(TaskMethod,“long running”,TaskCreationOptions.LongRunning);
t1.Start();
6、任务结果返回
public static double TaskWithResult(object o){
List l=(List)o;
double d=0;
if(l[1]!=0){
d=l[0]/l[1];
}
return d;
}

public static void TaskWithResultDemo(){
var t1=new Task(TaskWithResult, l);
t1.Start();
Console.WriteLine(t1.Result);
}
7、连续任务
public static void TaskDoFirst(){
Console.WriteLine(“进入任务1处理程序”);
}
public static void TaskDoSecond(){
Console.WriteLine(“进入任务2处理程序”);
}
public static void ContinueTasks(){
Task t1=new Task(TaskDoFirst);
Task t2=t1.ContinueWith(TaskDoSecond);
Task t3=t1.ContinueWith(TaskDoSecond);
Task t4=t2.ContinueWith(TaskDoSecond, TaskContinuationOptions.OnlyOnFaulted);
t1.Start();
}
8、等待任务
WaitAll()方法阻塞调用任务,直到等待的所有任务完成为止;
WhenAll()返回一个任务,允许用async关键字等待结果,不会阻塞等待任务。
Task.Delay()方法指定从这个方法返回的任务完成前要等待的毫秒数。

C#任务Task应用详解相关推荐

  1. Swoole WebSocket服务使用Task任务详解 (面向对象方法)

    Swoole WebSocket服务使用Task任务详解 (面向对象方法) 作者: 绝爱七八丶 博客: https://blog.csdn.net/qq_40193451 日期: 2018.8.24 ...

  2. MDT2013 8456 Task Sequence详解

    MDT部署模式最佳实践,微软提供的Task Sequence模板,我们只需要改动磁盘信息,和驱动导入策略,就可以成功部署系统. 网络上有很多rules规则的文件,虽然杂乱无章,但遇到此类问题基本能解决 ...

  3. SpringBoot定时任务@Scheduled注解详解

    SpringBoot定时任务@Scheduled注解详解 项目开发中,经常会遇到定时任务的场景,Spring提供了@Scheduled注解,方便进行定时任务的开发 概述 要使用@Scheduled注解 ...

  4. Java中的Timer和Timer Task详解

    Java Timer&TimerTask原理分析 如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer ...

  5. Android Gradle 自定义Task详解二:进阶

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  6. Android Gradle 自定义Task 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  7. 关于Spring 任务调度之task:scheduler与task:executor配置的详解

    关于Spring 任务调度之task:scheduler与task:executor配置的详解 其实就是Spring定时器中配置文件中一些配置信息,由于笔者自己是头一次使用,有些配置详细不太明白,随即 ...

  8. C# Task和async/await详解

    C# Task和async/await详解 什么是异步 Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 1 Thread阻塞线程的方法 2 T ...

  9. C语言中task的用法,C# Task详解

    C# Task详解  https://www.cnblogs.com/zhaoshujie/p/11082753.html 1.Task的优势 ThreadPool相比Thread来说具备了很多优势, ...

最新文章

  1. UVa 11624,两次BFS
  2. python 视频 灰度 伽玛_Python 图像处理实战 | 图像的灰度非线性变换之对数变换、伽马变换...
  3. 堆排序时间复杂度_堆排序算法
  4. Vue+ElementUI纯前端技术实现对表格数据的增删改查
  5. VTK修炼之道16:图像处理_窗口分割和图像融合(ViewportvtkImageBlend)
  6. MySQL高级 - 内存优化 - 优化原则
  7. 我犯的错误--struts标签s:radio
  8. java最小子串覆盖_Java 算法-最小子串覆盖
  9. 【转】android通讯录列表,A~Z字母提示view
  10. 2021-2025年中国充气救生衣行业市场供需与战略研究报告
  11. Java 核心 API 必须掌握的程度
  12. hadoop运维笔记
  13. 用什么工具可以制作gif?分享一款在线制作gif动画工具
  14. Arch Linux下 让MPlayer用上CoreAVC1.7.0.0解码器
  15. ourdev 学习arm先看看,工具和软件分析
  16. 定制性MES系统软件
  17. 有哲理有关java的_从Java到“浑沌之死”再到人生哲理
  18. 管理系统页面布局 html,25 个精美的后台管理界面模板和布局
  19. [frida] 01_食用指南(持续更新)
  20. 为什么计算机打开u盘这么慢,电脑读取u盘文件速度慢

热门文章

  1. golang结构体与接口笔记
  2. linux教程如何创建文件夹,Linux教程之Linux mkdir 创建文件夹命令
  3. 超像素(Superpixel)理解
  4. 2021安徽阜阳高考成绩排名查询,2021阜阳高中排名前十 最新学校排名
  5. 基于概率距离削减法、蒙特卡洛削减法的风光场景不确定性削减(Matlab代码实现)
  6. 【那些年,我们一起追的女孩】第十二章
  7. 在win10 下建立虚拟局域网
  8. mysql数据库索引的创建语句
  9. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第七集
  10. wind7 cywind ssh 无密码登录localhost