C#并行编程--并行任务

并行任务的概念(from  msdn)

任务并行库 (TPL) 基于任务的概念。 术语“任务并行”是指一个或多个独立的任务同时运行。 任务表示异步操作,在某些方面它类似于创建新线程或 ThreadPool 工作项,但抽象级别较高。 任务提供两个主要好处:

  • 系统资源的使用效率更高,可伸缩性更好。

    在后台,任务排队到 ThreadPool,ThreadPool 已使用登山等算法进行增强,这些算法能够确定并调整到可最大化吞吐量的线程数。 这会使任务相对轻量,您可以创建很多任务以启用细化并行。 为了补偿这一点,可使用众所周知的工作窃取算法提供负载平衡。

  • 对于线程或工作项,可以使用更多的编程控件。

    任务和围绕它们生成的框架提供了一组丰富的 API,这些 API 支持等待、取消、继续、可靠的异常处理、详细状态、自定义计划等功能。

出于这两个原因,在 .NET Framework 4 中,任务是用于编写多线程、异步和并行代码的首选 API。

 

创建和运行任务的两种方式

1.隐式创建并运行任务

Parallel.Invoke(),这个方法提供隐式创建任务并且直接运行,参数就是Action,而且可以是多个Action方法

有几种代码可以实现

复制代码
1.
            Parallel.Invoke(() =>
            {
                Console.WriteLine("test");
            });
2.
          Parallel.Invoke(Sum1, Sum2);
3.
           Parallel.Invoke(()=> Sum1());
          //Sum1是方法名称
复制代码

2.显式创建和运行任务

复制代码
1.创建任务和运行任务分开执行的方式。先创建Task,然后调用Start开始

Task t = new Task(Sum1);
 t.Start();

2,创建任务和运行任务一起执行的方式。
Task.Factory.StartNew(Action action )
复制代码

显式和隐式创建任务不仅仅是代码方式的不同,

最大的不同在于Paralle.Invoke执行并行方法以后是要等待方法执行完毕的并返回的

Task创建的任务是异步执行,不等待任务执行完毕的。所以Parallel.Invoke相当于Task开始执行以后调用Task.Wait()这个方法。

 

比如

复制代码
 
//Sum1执行一段耗时方法,然后输出结果
 Parallel.Invoke(Sum1) 
Console.WriteLine(
".......................");
这个方法会先输出Sum1的结果,然后才输出“。。。。。。。。。。。”


Task t = new Task(Sum1); t.Start(); Console.WriteLine("......................."); 这个方法会先输出".............." 然后才输出Sum1的结果
复制代码

 

 在任务中返回结果

在Task中返回结果比较简单

使用Task<Result> 就可以返回结果

复制代码
Task<int> task1 = Task<int>.Factory.StartNew(() => 1); 
int
i = task1.Result;

Task<Test> task2 = Task<Test>.Factory.StartNew(() => { string s = ".NET"; double d = 4.0; return new Test { Name = s, Number = d }; }); Test test = task2.Result;
复制代码

 

http://www.cnblogs.com/zjypp/archive/2012/06/01/2530918.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值