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 @ 2023-12-15 11:12  trykle  阅读(23)  评论(0编辑  收藏  举报