Parallel
System.Threading.Tasks
Parallel.ForEach
Parallel.ForEach(source, item =>
{
item.age = item.age + 10;
System.Threading.Thread.Sleep(10);
});
Parallel.For(1, 100, (i, ParallelLoopState) =>
{
// 当某一个循环单元的数大于30,
// 则停止Parallel.For的执行
if ( i > 30)
{
// 停止并退出Parallel.For
ParallelLoopState.Stop();
return;
}
});
- 应用
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
string[] data = { "str1", "str2", "str3" };
ParallelLoopResult result = Parallel.ForEach<string>(data, str =>
{
Console.WriteLine(str);
});
Console.WriteLine("是否完成:{0}", result.IsCompleted);
}
}
- ParallelLoopState Break,Stop
Parallel.ForEach(elements, (element, ParallelLoopState) =>
{
if (element == "")
{
ParallelLoopState.Break();
return;
}
});
Parallel.For
int count = source.Count();
Parallel.For(0, count, item =>
{
//source[count].age= source[count].age + 10;
System.Threading.Thread.Sleep(10);
});
- 应用
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
ParallelLoopResult result = Parallel.For(0, 10, i =>
{
Console.WriteLine("迭代次数:{0},任务ID:{1}", i, Task.CurrentId);
});
Console.WriteLine("是否完成:{0}", result.IsCompleted);
}
}
Parallel.Invoke
- Parallel.Invoke() 方法,它提供了任务并行性模式。允许传递一个 Action 委托数组,在其中可以指定应运行的方法
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Parallel.Invoke(() =>
{
Thread.Sleep(100);
Console.WriteLine("method1");
}, () =>
{
Thread.Sleep(10);
Console.WriteLine("method2");
});
}
}
Stop和Break
- 这个对象有两个函数,Stop和Break,可以分别用来控制Parallel.For的执行。
- 调用Stop,表示Parallel.For的执行立刻停止,无论其他执行单元是否达到停止的条件。
- 而如果我们使用Break,则表示满足条件的当前执行单元立刻停止,而对于其他执行单元,其中满足停止条件也会通过Break停止,其他未满足停止条件的则会继续执行下去,从而全部执行完毕,自然停止。
- 当所有执行单元停止后,Parallel.For函数才停止执行并退出。
break类似于for的continue
,而stop就类似于for的break