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
作者:德乌姆列特
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理