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. ***
*****************************************************
posted @ 2019-09-24 15:01  Gangle  阅读(408)  评论(0编辑  收藏  举报