• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

.NET并行(多核)编程系列之六 Task基础部分完结篇

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:

 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些使用方法,本篇很短,将会结束Task的基础知识的介绍。

本篇的主要议题如下:

1. 获取Task的状态

2. 执行晚加载的Task(Lazily Task)

3. 常见问题的解决方案

1.获取Task的状态

在.NET并行编程还有一个已经标准化的操作就是可以获取task的状态,通过Task.Status属性来得到的,这个属性返回一个System.Threading.Tasks.TaskStatus的枚举值。

如下:

Created:表明task已经被初始化了,但是还没有加入到Scheduler中。

WatingForActivation:task正在等待被加入到Scheduler中。

WaitingToRun:已经被加入到了Scheduler,等待执行。

Running:task正在运行

WaitingForChildrenToComplete:表明父task正在等待子task运行结束。

RanToCompletion:表明task已经执行完了,但是还没有被cancel,而且也这个task也没有抛出异常。

Canceled:表明task已经被cancel了。(大家可以参看之前讲述取消task的文章)

Faulted:表明task在运行的时候已经抛出了异常。

2. 执行晚加载的Task(Lazily Task)

晚加载,或者又名延迟初始化,主要的好处就是避免不必要的系统开销。在并行编程中,可以联合使用Lazy变量和Task<>.Factory.StartNew()做到这点。(Lazy变量时.NET 4中的一个新特性,这里大家不用知道Lazy的具体细节)

Lazy变量只有在用到的时候才会被初始化。所以我们可以把Lazy变量和task的创建结合:只有这个task要被执行的时候才去初始化。

 

下面还是通过例子来讲解:

static void Main(string[] args)
{
// define the function
Func<string> taskBody = new Func<string>(() =>
{
Console.WriteLine("Task body working...");
return "Task Result";
});
// create the lazy variable

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1978130638@qq.com ,  QQ