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……
同样,由于所有的任务都是并发的,所以它不保证先后次序。
http://wenku.baidu.com/link?url=Q4uTdUrVJHUwZasCmv2SxUJUgSMv5gqIL_C-YvkFuap157lvwMdworffmww9rOt_l5FwBupGVmfCD6h6duFCjf5j1x6-VuQXV5dj2xlPLfi