Parallel.For 并发控制
普通并发
Parallel.For(1, 500, new ParallelOptions() { MaxDegreeOfParallelism = 2 }, i =>
{
Console.WriteLine(i);
Thread.Sleep(2000);
});
异步并发
此时,内部并不会等待方法执行完成,并发数量失效
Parallel.For(1, 500, new ParallelOptions() { MaxDegreeOfParallelism = 2 }, async i =>
{
Console.WriteLine(i);
await Task.Delay(2000);
});
可以在里面再套一层
Parallel.For(0, 500, new ParallelOptions { MaxDegreeOfParallelism = 2 }, i =>
{
Task.Run(async () =>
{
Console.WriteLine(i);
await Task.Delay(2000);
}).Wait();
});
在ui程序中,如果事件层需要使用async,又需要再套一层
啊?
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Task.Run(() =>
{
Parallel.For(0, 100, new ParallelOptions() { MaxDegreeOfParallelism = 2 }, i =>
{
Task.Run(async () =>
{
Console.WriteLine(i);
await Task.Delay(2000);
}).Wait();
});
});
}