C#任务Task应用详解
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应用详解相关推荐
- Swoole WebSocket服务使用Task任务详解 (面向对象方法)
Swoole WebSocket服务使用Task任务详解 (面向对象方法) 作者: 绝爱七八丶 博客: https://blog.csdn.net/qq_40193451 日期: 2018.8.24 ...
- MDT2013 8456 Task Sequence详解
MDT部署模式最佳实践,微软提供的Task Sequence模板,我们只需要改动磁盘信息,和驱动导入策略,就可以成功部署系统. 网络上有很多rules规则的文件,虽然杂乱无章,但遇到此类问题基本能解决 ...
- SpringBoot定时任务@Scheduled注解详解
SpringBoot定时任务@Scheduled注解详解 项目开发中,经常会遇到定时任务的场景,Spring提供了@Scheduled注解,方便进行定时任务的开发 概述 要使用@Scheduled注解 ...
- Java中的Timer和Timer Task详解
Java Timer&TimerTask原理分析 如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer ...
- Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- Android Gradle 自定义Task 详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- 关于Spring 任务调度之task:scheduler与task:executor配置的详解
关于Spring 任务调度之task:scheduler与task:executor配置的详解 其实就是Spring定时器中配置文件中一些配置信息,由于笔者自己是头一次使用,有些配置详细不太明白,随即 ...
- C# Task和async/await详解
C# Task和async/await详解 什么是异步 Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 1 Thread阻塞线程的方法 2 T ...
- C语言中task的用法,C# Task详解
C# Task详解 https://www.cnblogs.com/zhaoshujie/p/11082753.html 1.Task的优势 ThreadPool相比Thread来说具备了很多优势, ...
最新文章
- UVa 11624,两次BFS
- python 视频 灰度 伽玛_Python 图像处理实战 | 图像的灰度非线性变换之对数变换、伽马变换...
- 堆排序时间复杂度_堆排序算法
- Vue+ElementUI纯前端技术实现对表格数据的增删改查
- VTK修炼之道16:图像处理_窗口分割和图像融合(ViewportvtkImageBlend)
- MySQL高级 - 内存优化 - 优化原则
- 我犯的错误--struts标签s:radio
- java最小子串覆盖_Java 算法-最小子串覆盖
- 【转】android通讯录列表,A~Z字母提示view
- 2021-2025年中国充气救生衣行业市场供需与战略研究报告
- Java 核心 API 必须掌握的程度
- hadoop运维笔记
- 用什么工具可以制作gif?分享一款在线制作gif动画工具
- Arch Linux下 让MPlayer用上CoreAVC1.7.0.0解码器
- ourdev 学习arm先看看,工具和软件分析
- 定制性MES系统软件
- 有哲理有关java的_从Java到“浑沌之死”再到人生哲理
- 管理系统页面布局 html,25 个精美的后台管理界面模板和布局
- [frida] 01_食用指南(持续更新)
- 为什么计算机打开u盘这么慢,电脑读取u盘文件速度慢