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();
});
});
}
posted @   trykle  阅读(78)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示