task中能否嵌套Parallel.foreach语句?

问题描述

业务场景是这样的:一个采集程序需要采集歌手数据,包含6个字段(代表作、专辑、性别、出道日期、国籍、爱好)。这6个待采集的数据字段分布在6批不同的网址,每批网址有10w个(就是说一共需要采集60w网址)。问题1:为了提高采集速度,我是否应该在程序中开启6个task去执行采集任务,然后在每个task中再使用Parallel.foreach去采集对应的10w个网址?问题2:为了提高采集速度,是否应该为这6个待采集字段建立6个数据表,以免多个线程同时写入一个表导致写入速度慢?谢谢。

解决方案

解决方案二:
没什么用吧Parallel.foreach是针对cpu核数的可以这样intworkThreadNumTemp=Math.Min(workThreadNum,ls.Count);Enumerable.Range(0,workThreadNumTemp).AsParallel().ForAll(n=>{for(inti=n;i<ls.Count;i=i+workThreadNumTemp){intindex=i;//}});

解决方案三:
写入的话可以用mongodb一个表就行了如果修改的话多线程情况可能要加锁如果机器多的话可以分几台机器处理

时间: 2024-09-14 18:49:17

task中能否嵌套Parallel.foreach语句?的相关文章

.Net 4.0 Parallel 编程(五)Task (中)

在上篇文章中我们看过了如何创建Task,本篇文章就各种类型Task的使用进行说明. Task Continuations 首先我们来看看延续的Task,所谓的延续的Task就是在第一个Task完成后自动启动下一个Task.我们通过ContinueWith方法来创建延续的Task.我们假设有一个接受xml解析的服务,首先从某个地方接受文件,然后解析入库,最后返回回执是否解析正确: [TestMethod] public void TaskParallelPrint() { var ReceiveT

一起谈.NET技术,.Net 4.0 Parallel 编程(五)Task (中)

在上篇文章中我们看过了如何创建Task,本篇文章就各种类型Task的使用进行说明. Task Continuations 首先我们来看看延续的Task,所谓的延续的Task就是在第一个Task完成后自动启动下一个Task.我们通过ContinueWith方法来创建延续的Task.我们假设有一个接受xml解析的服务,首先从某个地方接受文件,然后解析入库,最后返回回执是否解析正确: [TestMethod]public void TaskParallelPrint() { var ReceiveTa

关于ASP.NET编程中的嵌套If语句

本文将为大家简单介绍一下有关ASP.NET编程中的嵌套If语句的格式及用法,希望对大家有所帮助.下面就具体来看一下. 嵌套If语句 其格式如下: 以下是引用片段: If条件式1Then If条件式2Then 语句块1 Else 语句块1-2 EndIf 其他语句 Else 语句块2 EndIf 所谓的嵌套if语句,就是在If条件式中的语句块也是一组if条件式,其语句块又为一组if条件式,如此重复下去直到条件设置完毕. 一般而言,最复杂的条件式为嵌套条件式语句,以上所提到的所有条件式语句格式都可以

asp.net c# foreach语句遍历数组(1/3)

foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组.foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用. 备注 -------------------------------------------------------------------------------- 嵌入语句为数组或集合中的每个元素继续执行.当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句. 可以在 foreach 块的任何点使

C#的foreach语句

foreach语句是在C#中新引入的,C和C++中没有这个语句,而Visual Basic的程序员应该对它不会陌生.它表示收集一个集合中的各个元素,并针对各个元素执行内嵌语句.语句的格式为: foreach(type identifier in expression)embedded-statement 其中类型(type)和标识符(identifier)用来声明循环变量,表达式(expression)对应集合.每执行一次内嵌语句,循环变量就依次取集合中的一个元素代入其中.在这里,循环变量是一个

C#巧用foreach语句控制控件

foreach语句用来迭代集合中的每个项目,其语法格式如下: foreach(type identifier in expression) 在本实例中,使用foreach语句实现清空当前窗体上所有TextBox的Text值,同样也可以用foreach语句来控制同一容器中一组相同的控件.这样可以大大的提高程序人员的工作效率.其代码如下: private void clearText() { foreach (Control cont in this.gbLogin.Controls) { if (

C# Foreach语句

foreach语句表示收集一个集合中的各个元素,并针对各个元素执行内嵌语句. 语句的格式为: foreach(type identifier in expression)embedded-statement foreach(元素类型  变量名  in 集合或数组名) {语句} 其中类型(type)和标识符(identifier)用来声明循环变量,表达式(expression)对应集合.每执行一次内嵌语句,循环变量就依次取集合中的一个元素代入其中.在这里,循环变量是一个只读型局部变量,如果试图改变

MyBatis的foreach语句详解_java

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collectio

Parallel.ForEach 并行给微信发消息

问题描述 Parallel.ForEach(entity.OpenId,openid=>{varmesg=Task<string>Send()(对外发送请求且等待回来的消息)insert(mesg);返回消息记录数据库下来});我是给微信发几十万次请求为什么发到一万不到就报AggregateException错误捕获异常也不行 解决方案