有一百个网站,单个执行(每个只打开一次),想建10个线程,分别执行打开这100个网站,如果哪个线程空闲了,就由这个线程执行下一个需要打开的网站,后一个线程空闲后,刚执行下面另外一个没有打开过的网站。求方法、思路。。
解决方案 »
- 在线等 关于未将对象引用设置到对象的实例
- winform中的dll问题~~各位帮忙~~
- ****************1000Help!Help!Help!求乘法原理的算法
- C#中的二维数组问题
- C#中是否有线程局部变量的概念
- C#的客户端问题
- 如何让 decimal变量 和double类型变量 相乘???
- 为什么C#不如vb.net输入的爽?微软故意的吗?
- 请教高手——如何两次调用异步方法?
- 求救:由String转换到int,发现值不对,那位能帮忙?
- c# 中怎么把richtextbox中有图片和文字的一起保存进数据库?
- 用VS2008和SQL做一个登陆框框,出现“应输入类型、命名空间定义或文件尾”
另外,使用什么版本的.Net Framework?在什么环境下?为什么一定要10个线程?能不能浮动?等等……总感觉很奇怪。
给个PLINQ的方法好了:
//假设:
//有一系列地址的集合
List<string> l = ...;
//执行“打开网站”的方法为
void DoWork(string url);
//只需要执行:
l.AsParallel().WithDegreeOfParallelism(10).WithExecutionMode(ParallelExecutionMode.ForceParallelism).ForAll(DoWork);不是4.0+的话,需要自行实现线程池以及任务分配工作。
第二是正常的.net环境,第三10个不一定是固定的,可以改成5个,或者其它数字。还有PLINQ不是很熟悉,能不能别的方法?
思路比较土鳖,可以参考下!
4.0下实现类似线程池的TPL方案。
如何:使用线程池(C# 编程指南)
使用ThreadPool,可以参考ThreadPool设计自己的线程池
Code for a simple thread pool in C#
自行实现线程池的例子,第二个回答。
首先int i=0,
然后新建一个保存线程的数组,数组的长度可以按要求设置,
遍历这个数组,全部开始执行打开网站的方法,方法大致如下:
while循环,条件是i<需要打开的网址的数组长度,
“i++;”,
执行打开网址的方法,网址根据i从数组取,
执行完while之后将线程全部终止。注意:while内第一步就要执行i++,千万不要放在最后面了。