1. Parallel 的使用
①
Parallel.Invoke(Run1, Run2);
②
Parallel.For(0, 10000, item => {
DoWork(item);}
});
③
Parallel.ForEach(list, item =>
{
DoWork(item);
});
2. Parallel中途退出循环
它提供了一个ParallelLoopState,该实例提供了Break和Stop方法来帮我们实现。
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循环遍历输出异常信息,可以看到两个异常信息都显示了。