博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
改善C#程序的建议10:用Parallel简化Task
阅读量:6477 次
发布时间:2019-06-23

本文共 1385 字,大约阅读时间需要 4 分钟。

在命名空间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……

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

 微信扫一扫,关注最课程(),获取更多我的文章,获取软件开发每日一练

之前话题:

转载于:https://www.cnblogs.com/luminji/archive/2011/05/19/2050692.html

你可能感兴趣的文章
PHP生成静态html文件 的三种方法
查看>>
leetcode-796-Rotate String
查看>>
sqlserver 批量删除存储过程(转)
查看>>
微信小程序 setData 的坑(转)
查看>>
javascript 阻塞
查看>>
PHP 使用共享内存的资料
查看>>
getLayoutInflater().inflate .
查看>>
CSS3制作心形头像
查看>>
app开发-1
查看>>
今天开始学习oracle
查看>>
对象排序
查看>>
Jmeter测试websocket接口
查看>>
css3 - 纯css实现一个轮播图
查看>>
dubox首次调用消费者执行两次问题
查看>>
集合源码阅读——ArrayList
查看>>
文件上传及文件大小限制_学习笔记
查看>>
HDU-4515 小Q系列故事——世界上最遥远的距离 模拟
查看>>
IIS7配置PHP图解(转)
查看>>
linux系统管理 系统文件
查看>>
PHP(八)数组
查看>>