zoukankan      html  css  js  c++  java
  • C# 并行编程 Parallel

    1. Parallel 的使用

    ① 

    Parallel.Invoke(Run1, Run2);


    Parallel.For(0, 10000, item =>
    {

    DoWork(item);}
    });

     ③

    Parallel.ForEach(list, item =>
    {
       DoWork(item);
    });


    2. Parallel中途退出循环

    它提供了一个ParallelLoopState,该实例提供了BreakStop方法来帮我们实现。
    Break: 当然这个是通知并行计算尽快的退出循环,比如并行计算正在迭代100,那么break后程序还会迭代所有小于100的。
    Stop:这个就不一样了,比如正在迭代100突然遇到stop,那它啥也不管了,直接退出。

    ConcurrentBag<int> bag = new ConcurrentBag<int>();
    Parallel.For(0, 1000, (i, state) =>
    {
      if (bag.Count == 300)
      {
        state.Stop();
        return;
      }
      bag.Add(i);
    });
    Console.WriteLine("Bag count is " + bag.Count);

    这里使用的是Stop,当数量达到300个时,会立刻停止;可以看到结果"Bag count is 300",如果用break,可能结果是300多个或者300个。


    3. Parallel异常处理

    try
    {
       Parallel.Invoke(Run1, Run2);
    }
    catch (AggregateException aex)
    {
       foreach (var ex in aex.InnerExceptions)
       {
          Console.WriteLine(ex.Message);
       }
    }

    捕获AggregateException 异常后,用foreach循环遍历输出异常信息,可以看到两个异常信息都显示了。





    *****************************************************
    *** No matter how far you go, looking back is also necessary. ***
    *****************************************************
  • 相关阅读:
    Spring线程池由浅入深的3个示例
    ThreadPoolExecutor之一:使用基本介绍
    Spring中的线程池ThreadPoolTaskExecutor介绍
    ThreadPoolTaskExecutor异常收集
    SPRING中的线程池ThreadPoolTaskExecutor
    ThreadPoolTaskExecutor的配置解释
    jenkins邮件配置
    使用Jenkins配置自动化构建
    Hudson和Jenkins的关系
    PV 和 UV IP
  • 原文地址:https://www.cnblogs.com/gangle/p/11578335.html
Copyright © 2011-2022 走看看