-
千万里不及你
先问自己一些问题:(1)就算N个线程取网页的速度不同,能有多少差异呢?这个差异是如此大以至于不能容忍非要开10个线程比较速度?(2)为何是10个线程,为何不是8个,不是2个,不是20个?这个数字你是如何得出的?(3)就算是10个线程,平均速度一定比单线程取快吗?9个线程多少会拖慢速度的吧(增加远程服务器压力和本机压力)。然后单纯回答你的问题:
int threadsCount = 10; var threads = new Thread[threadsCount]; var handles = new ManualResetEvent[threadsCount]; for (int i = 0; i < threadsCount; i++) { var j = i; handles[j] = new ManualResetEvent(false); threads[j] = new Thread(() => { //下载网页的代码 handles[j].Set(); }); threads[j].Start(); }
var finished = WaitHandle.WaitAny(handles); for (int i = 0; i < threadsCount; i++) { if (i != finished) { try { threads[i].Abort(); } catch { //记录日志什么的 } } }
//继续你的工作
-
沧海一幻觉
把十个线程存储到一个公共的数组里,当某一个线程完成后,则把别的线程停止,从线程池(数组里)取出来然后调用Stop函数。
-
婷婷同学_
线程停止,你们是怎么做的?
可能会出现这个情况哦。
Abort()?
-
慕慕森
@水墨.MR.H: 对。就用这个Abort方法,不过,最好做一个TRY-CATCH,因为ABORT会报告一个线程异常停止的异常,虽然没什么影响,最好还是捕获一下。
-
千巷猫影
我个人不认为这种做法是对的。
线程同步和互斥要考虑的复杂度很多很多。
这种场景下并不适合多线程。
-
慕尼黑5688855
肯定要用多线程,因为 不同线程取的速度不同。。
就像你同时 刷新2个网页,不一定先刷新的那个 就先加载完毕