C# Parallel用法

在命名空间

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

原文地址:https://www.cnblogs.com/bdbw2012/p/4635005.html