C# Parallel 多线程并发
Parallel并发执行多个任务 多线程的,主线程会参与计算---阻塞界面等于TaskWaitAll+主线程计算
常用方法
1、Invoke 尽可能并行执行提供的每个操作
1 Console.WriteLine("***************Parallel.Invoke Start******************"); 2 Parallel.Invoke( 3 () => Console.WriteLine("action0"), 4 () => Console.WriteLine("action1"), 5 () => Console.WriteLine("action2"), 6 () => Console.WriteLine("action3"), 7 () => Console.WriteLine("action4"), 8 () => Console.WriteLine("action5"), 9 () => Console.WriteLine("action6")); 10 Console.WriteLine("***************Parallel.Invoke End******************"); 11 Console.WriteLine();
2、For 并行运行迭代,可以配置循环选项,可以监视和操作循环的状态
1 Console.WriteLine("***************Parallel.For Start******************"); 2 Parallel.For(0, 5, i => Console.WriteLine($"Parallel.For{i}")); 3 Parallel.For(0, 5, (i,p) => Console.WriteLine($"Parallel.For{i} {p.IsExceptional}")); 4 Console.WriteLine("***************Parallel.For End******************"); 5 Console.WriteLine();
3、Foreach 并行运行迭代,可以配置循环选项,可以监视和操作循环的状态
1 var array = new[] { "A", "B", "C", "D", "E" }; 2 Console.WriteLine("***************Parallel.ForEach Start******************"); 3 Parallel.ForEach(array, s => Console.WriteLine(s)); 4 Console.WriteLine("***************Parallel.ForEach End******************"); 5 Console.WriteLine();
有没有办法不阻塞主线程?结合Task
1 Task.Run(() => 2 { 3 ParallelOptions options = new ParallelOptions(); 4 options.MaxDegreeOfParallelism = 3; 5 Parallel.For(0, 10, options, s => Console.WriteLine(s)); 6 });
微软文档:
Parallel:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.parallel?view=netframework-4.8
ParallelOptions:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.paralleloptions?view=netframework-4.8
作者:德乌姆列特
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!