Parallel类
Parallel类是对线程很好的一个抽象。该类位于System.Threading.Tasks名称空间中,提供了数据和任务并行性。
Parallel类定义了并行的for和foreach的静态方法。Parallel类使用多个任务,因此使用多个线程来完成这个作业。
Parallel.For()和Parallel.Foreach()方法在每次迭代中调用相同的代码,而Parallel.Invoke()方法允许同时调用不同的方法。Parallel.Invoke用于任务并行性,而Parallel.Foreach用于数据并行性。
下面的例子前面两个参数表示从0到9迭代。第三个参数是一个Action委托。
ParallelLoopResult result = Parallel.For(0,10,i=> {
Console.WriteLine("{0},task:{1},thread:{2}",i,Task.CurrentId,Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(10);
});
上面的例子使用Task.Delay(10);可以看到不一样的结果,分析线程和任务是如何执行的
ParallelLoopResult result = Parallel.For(0,10,async i=> {
Console.WriteLine("{0},task:{1},thread:{2}",i,Task.CurrentId,Thread.CurrentThread.ManagedThreadId);
await Task.Delay(10);
Console.WriteLine("{0},task:{1},thread:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("is completed:{0}", result.IsCompleted);
在输出中可以看到,调用 Task.Delay(10);后,线程发生了变化。任务不在存在,只留下线程,而且重用了前面的线程,还有一个重要的方面是,Parallel类的For方法并没有等待延迟,而是直接完成。它只等待它创建的任务,而不等待其他后台活动。
提前停止Parallel.For
可以提前终止所有迭代,调用ParallelLoopState的Break和Stop方法。如下:
ParallelLoopResult result = Parallel.For(10, 30, async (int i ,ParallelLoopState pls) => {
Console.WriteLine("{0},task:{1}", i, Task.CurrentId);
await Task.Delay(10);
if (i > 13)
pls.Break();
});
Console.WriteLine("is completed:{0}", result.IsCompleted);
Console.WriteLine("lowest break iteration:{0}",result.LowestBreakIteration);
Parallel.ForEach方法遍历是已异步方式遍历,没有确定遍历顺序。此方法的中断也For方法相同。
string[] data = { "1","2","3","4","5",};
ParallelLoopResult result = Parallel.ForEach<string>(data, s => { Console.WriteLine(s); });
Parallle.Invoke方法允许传递一个Action委托数组,也就是可以并行调用多个方法。
static void Main()
{
Parallel.Invoke(Foo, Bar);
}
static void Foo()
{
Console.WriteLine(1);
}
static void Bar()
{
Console.WriteLine(2);
}
Parallel类的更多相关文章
- Parallel类(简化Task 操作)
Parallel类 Parallel类是对线程的一个很好抽象.该类位于System.Threading.Tasks命名空间中,提供了数据和任务并行性. 1.用Parallel.For()方法循环 // ...
- 多线程之Parallel类
Parallel类是对线程的一个抽象.该类位于System.Threading.Tasks名称空间中,提供了数据和任务并行性. Paraller类定义了数据并行地For和ForEach的静态方法,以及 ...
- C# 并行任务——Parallel类
一.Parallel类 Parallel类提供了数据和任务的并行性: 二.Paraller.For() Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务.使用Paral ...
- 第九节:深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)
一. 并行编程 1. 区分串行编程和串行编程 ①. 串行编程:所谓的串行编程就是单线程的作用下,按顺序执行.(典型代表for循环 下面例子从1-100按顺序执行) ②. 并行编程:充分利用多核cpu的 ...
- 转载 [深入学习C#]C#实现多线程的方式:使用Parallel类
简介 在C#中实现多线程的另一个方式是使用Parallel类. 在.NET4中 ,另一个新增的抽象线程是Parallel类 .这个类定义了并行的for和foreach的 静态方法.在为 for和 fo ...
- 数据与任务的并行---Parallel类
Parallel类是对线程的抽象,提供数据与任务的并行性.类定义了静态方法For和ForEach,使用多个任务来完成多个作业.Parallel.For和Parallel.ForEach方法在每次迭代的 ...
- 一、并行编程 - 数据并行 System.Threading.Tasks.Parallel 类
一.并行概念 1.并行编程 在.NET 4中的并行编程是依赖Task Parallel Library(后面简称为TPL) 实现的.在TPL中,最基本的执行单元是task(中文可以理解为"任 ...
- 【.Net】C#实现多线程的方式:使用Parallel类
简介 在C#中实现多线程的另一个方式是使用Parallel类. 在.NET4中 ,另一个新增的抽象线程是Parallel类 .这个类定义了并行的for和foreach的 静态方法.在为 for和 f ...
- [深入学习C#]C#实现多线程的方式:使用Parallel类
简介 在C#中实现多线程的另一个方式是使用Parallel类. 在.NET4中 ,另一个新增的抽象线程是Parallel类 .这个类定义了并行的for和foreach的 静态方法.在为 for和 f ...
随机推荐
- 九度OJ 1082:代理服务器 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1871 解决:574 题目描述: 使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私.我们知道n个代理服务器的IP地 ...
- zookeeper curator ( 实战一)
目录 zookeeper 的伪集群搭建 写在前面 1.1. zookeeper 安装&配置 1.1.1. 创建数据目录和日志目录: 1.1.2. 创建myid文件 1.1.3. 创建和修改配置 ...
- varnish代理缓存服务器的安装与使用
1. 下载解压 cd /usr/local/src/ wget https://codeload.github.com/varnishcache/varnish-cache/zip/master ch ...
- linux c编程:文件的读写
Linux系统中提供了系统调用函数open()和close()用于打开和关闭一个存在的文件 int open(const char *pathname,int flags) int open(cons ...
- 通过主机名来获取一个ip对象
//通过名称(ip字符串or主机名)来获取一个ip对象. InetAddress ip = InetAddress.getByName("www.baidu.com");//jav ...
- API的理解和使用——有序集合
有序集合常用的命令 命令 功能 zadd key score member [score member ... ] 添加元素 zcard key 计算成员个数 zscore key member 计算 ...
- sourceSet
android { sourceSets { main{ manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources ...
- 后端CORS解决跨域问题
一 . 为什么会有跨域问题 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href 属性,a标签什么的都不拦截. 二 . 解决跨域的方法 解决跨域有两种方法 ...
- 创建Django博客的数据库模型
声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用 blog最主要的功能就是展示我们写的文章 ...
- html5--2.1新的布局元素(1)-header/footer
html5--2.1新的布局元素(1)-header/footer 学习要点 了解header/footer的语义和用法 使用header/footer进行一个简单的布局 header元素(标签) 用 ...