C# Task的使用---Task的启动
.NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能。任务表示应完成的某个单元的工作。这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一个任务,这需要等待主调线程。使用任务不仅可以获得一个抽象层,还可以对底层线程进行许多控制。
启动任务
1)、使用TaskFactory类的实例,在其中把TaskMethod()方法传递给StartNew方法,就会立即启动任务。
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Threading;
6: using System.Threading.Tasks;
7: namespace TaskSamples
8: {
9: class Program
10: {
11: static void TaskMethod()
12: {
13: Console.WriteLine("running in a task");
14: Console.WriteLine("Task id:{0}",Task.CurrentId);
15: }
16:
17: static void Main(string[] args)
18: {
19: //using task factory
20: TaskFactory tf = new TaskFactory();
21: Task t1 = tf.StartNew(TaskMethod);
22: Console.ReadKey();
23: }
24: }
25: }
运行结果如下所示:

2)、使用Task类的Factory属性,Task.Factory返回TaskFactory的默认实例。在其中把TaskMethod()方法传递给StartNew方法。这种方法实际和第一种方法是一样的。
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Threading;
6: using System.Threading.Tasks;
7: namespace TaskSamples
8: {
9: class Program
10: {
11: static void TaskMethod()
12: {
13: Console.WriteLine("running in a task");
14: Console.WriteLine("Task id:{0}",Task.CurrentId);
16:
17:
15: }
18: static void Main(string[] args)
19: {
20:
21: //using the task factory via a task
22: Task t2 = Task.Factory.StartNew(TaskMethod);
23: Console.ReadKey();
24: }
25: }
26: }
3)、使用Task类的实例,然后调用Start方法启动任务。运行结果和上面两种方式相同。在使用Task类时,除了调用Start()方法,还可以调用RunSynchronously()方法。这样任务也会启动,但在调用者的当前线程中,它正在运行的时候,调用者需要一直等待到该任务结束。默认情况下,任务是异步运行的。
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Threading;
6: using System.Threading.Tasks;
7: namespace TaskSamples
8: {
9: class Program
10: {
11: static void TaskMethod()
12: {
13: Console.WriteLine("running in a task");
14: Console.WriteLine("Task id:{0}",Task.CurrentId);
15: }
16:
17: static void Main(string[] args)
18: {
19: ////using Task constructor
20: Task t3 = new Task(TaskMethod);
21: t3.Start();
22: Console.ReadKey();
23: }
24: }
25: }
使用Task类的构造函数和TaskFactory类的StartNew()方法时,都可以传递TaskCreationOptions枚举中的值。设置LongRunning选项,可以通知任务调度器,该任务需要较长时间执行,这样调度器更可能使用新线程。如果该任务应关联到父任务上,而父任务取消了,则该任务也应取消,此时应设置AttachToParent选项。PerferFairness的值表示,调度器应提取出已在等待的第一个任务。如果一个任务在另一个任务内容创建,这就不是默认情况。如果任务使用了子任务创建了其他工作,子任务就优先于其他任务。它们不会排在线程池队列中的最后。如果这些任务应以公平的方式与所有其他任务一起处理,就设置该选项为PerferFairness。
1: Task t3 = new Task(TaskMethod,TaskCreationOptions.PreferFairness);
2: t3.Start();
C# Task的使用---Task的启动的更多相关文章
- Task用法(1)-启动方法
第一.基本使用 Thread,ThreadPool,Task的区别 Task是.NET4.0加入的,跟线程池ThreadPool的功能类似,用Task开启新任务时,会从线程池中调用线程,而Thread ...
- Task.Run Vs Task.Factory.StartNew
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Task.Run Vs Task.Factory.StartNew z
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- MapReduce作业的map task和reduce task调度参数
MapReduce作业可以细分为map task和reduce task,而MRAppMaster又将map task和reduce task分为四种状态: 1.pending:刚启动但尚未向reso ...
- Task.Run与Task.Factory.StartNew的区别
Task是可能有延迟的工作单元,目的是生成一个结果值,或产生想要的效果.任务和线程的区别是:任务代表需要执行的作业,而线程代表做这个作业的工作者. 在.Net 4中,Task.Factory.Star ...
- Task.Run Vs Task.Factory.StartNew 【收藏】
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Task.Run 和 Task.Factory.StartNew
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析
原文地址: https://blog.csdn.net/yx0628/article/details/80873774 一个简单的Spring定时任务的 demo,全部代码见下载地址:https:// ...
- 【C# Task】理解Task中的ConfigureAwait配置同步上下文
原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获 ...
随机推荐
- Xcode全局断点
1.将导航器视图切换到断点导航器视图下,也可以用快捷键Command+7一步搞定,键盘是window风格的用户Command键是win键(有微软logo),然后点击左下角的+号,选择Add Symbo ...
- Qt窗体关闭时,如何自动销毁窗体类对象
Qt窗体关闭时,如何自动销毁窗体类对象 要对你的窗口设置WA_DeleteOnClose属性,默认的情况下关闭窗口仅仅意味着隐藏它 ImgWindow1->setAttribute(Qt ...
- P3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四
这个系列总算是做完了,这是我第一次高效率做完四道题,虽然中间有两道水题,但是第一和第四题还是蛮好的,但是只要能想到思路就很快能打完的. 像这道题,刚开始在想能不能用DP?但是苦于不知道怎么实施,后来又 ...
- js之内置对象
内置对象(Global和Math):JS程序在执行之前就已经存在,开发人员不必再取实例化的内置对象 下面对Global对象进行介绍一下,Math用的不多就不做介绍了 1.Global对象 Global ...
- 团队开发NABC特点
一.软件特点 我们所设计的躲避小球游戏,能够防止用户沉迷,且不会使用户有挫败感,失去玩游戏的兴趣. 二.进行NABC分析 N:我们适应于用户对娱乐.打发时间需求 A:我们用图形界面实现 B:此游戏适用 ...
- preseed.cfg分区设定案例
很久之前做ubuntu的PXE配置ubuntu的preseed费了很大的力气,总结的不多,现在温习一下. 就我所接触的,有分区普通磁盘,LVM,和raid三种方式.其中前两中方式比较多,raid方式是 ...
- 从C中变化过来的各种语言的printf输出格式
在c.php和shell中经常可以碰到printf的使用,特别是在php中printf的相关变种有好几个:print.printf.sprintf.vprintf.vsprintf 在这些语言 ...
- 设置图片自适应DIV大小
可以利用CSS样式表中表示后代的复合选择器进行设置.例: <head> <style type="text/css"> #right img /*设定box ...
- 【POJ】【1160】Post Office
DP/四边形不等式 邮局,经典的四边形不等式例题! 关于四边形不等式的学习请看 赵爽论文<动态规划加速原理之四边形不等式> 题目总结&题解:http://blog.csdn.net ...
- JsUnit && JUnit之讲解
首先我们定义我们的函数 这里以最简单的加减乘除四个方法来进行测试 建立我们的js文件myjs.js function add(num1,num2){ return num1 + num2; } fun ...