• 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

  • 相关阅读:
    mysql删除重复数据
    Spring缓存注解
    Spring事物不回滚
    java.net.MalformedURLException: no protocol: www.baidu.com
    shred:减少删除文件的还原度
    rm命令防止误操作
    软链接:要根据软链接来写路径
    linux与windows文本文件间的转换:针对回车换行
    cat:文本编辑工具
    算术运算;赋值
  • 原文地址:https://www.cnblogs.com/bdbw2012/p/4635005.html
Copyright © 2020-2023  润新知