改善C#程序的建议10:用Parallel简化Task

在命名空间System.Threading.Tasks下,有一个静态类Parallel简化了在同步状态下的Task的操作。Parallel主要提供了3个有用的方法:For、ForEach、Invoke。

For方法,主要用于处理针对数组元素的并行操作,如下:

  
  
static void Main( string [] args)
{
int [] nums = new int [] { 1 , 2 , 3 , 4 };
Parallel.For(
0 , nums.Length, (i) =>
{
Console.WriteLine(
" 针对数组索引{0}对应的那个元素{1}的一些工作代码…… " ,i, nums[i]);
});
Console.ReadKey();
}

输出为:

  
  
针对数组索引0对应的那个元素1的一些工作代码……
针对数组索引2对应的那个元素3的一些工作代码……
针对数组索引1对应的那个元素2的一些工作代码……
针对数组索引3对应的那个元素4的一些工作代码……

可以看到,工作代码并不按照数组的索引次序进行遍历。显而易见,这是因为我们的遍历是并行的,不是顺序的。所以这里也可以引出一个小建议:如果我们的输出必须是同步的或者说必须是顺序输出的,则不应使用Parallel的方式。

Foreach方法,主要用于处理泛型集合元素的并行操作,如下:

  
  
static void Main( string [] args)
{
List
< int > nums = new List < int > { 1 , 2 , 3 , 4 };
Parallel.ForEach(nums, (item)
=>
{
Console.WriteLine(
" 针对集合元素{0}的一些工作代码…… " , item);
});
Console.ReadKey();
}

输出为:

  
  
针对集合元素1的一些工作代码……
针对集合元素4的一些工作代码……
针对集合元素3的一些工作代码……
针对集合元素2的一些工作代码……

使用For和Foreach方法,Parallel类型自动为我们分配Task完成针对元素的一些工作。当然我们也可以直接使用Task,但是上面的这种形式,在语法上看上去更简洁了。

Parallel的Invoke方法,则为我们简化了启动一组并行操作,它隐式启动的就是Task。该方法接受Params Action[]参数,如下:

  
  
static void Main( string [] args)
{
Parallel.Invoke(()
=>
{
Console.WriteLine(
" 任务1…… " );
},
()
=>
{
Console.WriteLine(
" 任务2…… " );
},
()
=>
{
Console.WriteLine(
" 任务3…… " );
});
Console.ReadKey();
}

输出为:

  
  
任务2……
任务3……
任务1……

同样,由于所有的任务都是并发的,所以它不保证先后次序。

 

之前话题:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值