建议81:使用Parallel简化同步状态下Task的使用
来源:互联网 发布:在c语言中随机数函数是 编辑:程序博客网 时间:2024/06/18 18:36
建议81:使用Parallel简化同步状态下Task的使用
在命名空间System.Threading.Tasks中,有一个静态类Parallel简化了在同步状态下的Task的操作。Parallel主要提供3个有用的方法:For、ForEach、Invoke。
For方法主要用于处理针对数组元素的并行操作,如下所示:
static void Main(string[] args) { int[] nums = new int[] { 1, 2, 3, 4 }; Parallel.For(0, nums.Length, (i) => { Console.WriteLine("针对数组索引{0}对应的那个元素{1}的一些工作代码……",i, nums[i]); }); Console.ReadKey(); }
输出为:
针对数组索引0对应的那个元素1的一些工作代码……
针对数组索引2对应的那个元素3的一些工作代码……
针对数组索引1对应的那个元素2的一些工作代码……
针对数组索引3对应的那个元素4的一些工作代码……
可以看到,工作代码并未按照数组的索引次序进行遍历。这是因为我们的遍历是并行的,不是顺序的。所以,这里也可以引出一个小建议:如果我们的输出必须是同步的或者说必须是顺序输出的,则不应使用Parallel的方式。
ForEach方法主要用于处理泛型集合元素的并行操作,如下所示:
static void Main(string[] args) { List<int> nums = new List<int> { 1, 2, 3, 4 }; Parallel.ForEach(nums, (item) => { Console.WriteLine("针对集合元素{0}的一些工作代码……", item); }); Console.ReadKey(); }
输出为:
针对集合元素1的一些工作代码……
针对集合元素4的一些工作代码……
针对集合元素3的一些工作代码……
针对集合元素2的一些工作代码……
使用For和ForEach方法,Parallel类型会自动为我们分配Task来完成针对元素的一些工作。当然我们也可以直接使用Task,但是上面的这种形式在语法上更为简洁。
Parallel的Invoke方法为我们简化了启动一组并行操作,它隐式启动的就是Task。该方法接受Params Action[ ]参数,如下所示:
static void Main(string[] args) { Parallel.Invoke(() => { Console.WriteLine("任务1……"); }, () => { Console.WriteLine("任务2……"); }, () => { Console.WriteLine("任务3……"); }); Console.ReadKey(); }
输出为:
任务2……
任务3……
任务1……
同样,由于所有的任务都是并行的,所以它不保证先后次序。
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
- 建议81:使用Parallel简化同步状态下Task的使用
- 改善C#程序的建议10:用Parallel简化Task
- 建议82:Parallel简化但不等同于Task默认行为
- 使用 Task 简化异步编程
- 多线程状态下使用同步机制的本质原因
- .NET4中Task类和Parallel类的一些简单使用
- .NET使用Task Parallel Library提高程序性能
- 【C#基础】Parallel的使用
- UIImagePickerController的简化使用
- task的使用
- C# Task的使用
- Task的使用
- Gradle Task的使用
- 使用Parallel.Invoke并行你的代码
- C# 中Parallel类的使用
- gun/linux 命令 parallel的使用
- Linux下Socket的简单使用及最简化封装
- Linux下Socket的简单使用及最简化封装
- 【监听文本框输入】区分oninput;onchange与onpropertychange
- 337. House Robber III
- Android之绘制动态折线图
- ++i与i++
- 第3天新手SEO基础计划之:设置域名
- 建议81:使用Parallel简化同步状态下Task的使用
- ActiveMQ入门实例
- ruby奇技淫巧 之 利用Fixnum的upto和downto方法来遍历数组
- SQL创建TABLE
- Go-Type
- Notification及BroadcastReceiver
- cd
- Docker为整个软件生命周期提供安全保障
- 关于NIO的博文推荐