zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【Ebola】python day4
    源代码管理SVN的使用
    源代码管理git的使用
    UIViewController的生命周期及iOS程序执行顺序
    iOS
    Quartz2D知识点聚合案例
    iOS之NSAttributedString-------字符属性
    iOS-控件响应用户控制事件之事件处理
    UINavigationController
    程序启动的完整过程
  • 原文地址:https://www.cnblogs.com/bdbw2012/p/4635005.html
Copyright © 2011-2022 走看看