Parallel

  • System.Threading.Tasks

Parallel.ForEach

  1. Parallel.ForEach(source, item =>
  2. {
  3. item.age = item.age + 10;
  4. System.Threading.Thread.Sleep(10);
  5. });
  6. Parallel.For(1, 100, (i, ParallelLoopState) =>
  7. {
  8. // 当某一个循环单元的数大于30,
  9. // 则停止Parallel.For的执行
  10. if ( i > 30)
  11. {
  12. // 停止并退出Parallel.For
  13. ParallelLoopState.Stop();
  14. return;
  15. }
  16. });
  • 应用
  1. using System;
  2. using System.Threading.Tasks;
  3. public class Program
  4. {
  5. public static void Main()
  6. {
  7. string[] data = { "str1", "str2", "str3" };
  8. ParallelLoopResult result = Parallel.ForEach<string>(data, str =>
  9. {
  10. Console.WriteLine(str);
  11. });
  12. Console.WriteLine("是否完成:{0}", result.IsCompleted);
  13. }
  14. }
  • ParallelLoopState Break,Stop
  1. Parallel.ForEach(elements, (element, ParallelLoopState) =>
  2. {
  3. if (element == "")
  4. {
  5. ParallelLoopState.Break();
  6. return;
  7. }
  8. });

Parallel.For

  1. int count = source.Count();
  2. Parallel.For(0, count, item =>
  3. {
  4. //source[count].age= source[count].age + 10;
  5. System.Threading.Thread.Sleep(10);
  6. });
  • 应用
  1. using System;
  2. using System.Threading.Tasks;
  3. public class Program
  4. {
  5. public static void Main()
  6. {
  7. ParallelLoopResult result = Parallel.For(0, 10, i =>
  8. {
  9. Console.WriteLine("迭代次数:{0},任务ID:{1}", i, Task.CurrentId);
  10. });
  11. Console.WriteLine("是否完成:{0}", result.IsCompleted);
  12. }
  13. }

Parallel.Invoke

  • Parallel.Invoke() 方法,它提供了任务并行性模式。允许传递一个 Action 委托数组,在其中可以指定应运行的方法
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. public class Program
  5. {
  6. public static void Main()
  7. {
  8. Parallel.Invoke(() =>
  9. {
  10. Thread.Sleep(100);
  11. Console.WriteLine("method1");
  12. }, () =>
  13. {
  14. Thread.Sleep(10);
  15. Console.WriteLine("method2");
  16. });
  17. }
  18. }

循环 - 图1

Stop和Break

  • 这个对象有两个函数,Stop和Break,可以分别用来控制Parallel.For的执行。
  • 调用Stop,表示Parallel.For的执行立刻停止,无论其他执行单元是否达到停止的条件。
  • 而如果我们使用Break,则表示满足条件的当前执行单元立刻停止,而对于其他执行单元,其中满足停止条件也会通过Break停止,其他未满足停止条件的则会继续执行下去,从而全部执行完毕,自然停止。
  • 当所有执行单元停止后,Parallel.For函数才停止执行并退出。

break类似于for的continue,而stop就类似于for的break