6 回答
TA贡献1784条经验 获得超9个赞
先问自己一些问题:(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 { //记录日志什么的 }
}
}
//继续你的工作
TA贡献1856条经验 获得超17个赞
@水墨.MR.H: 对。就用这个Abort方法,不过,最好做一个TRY-CATCH,因为ABORT会报告一个线程异常停止的异常,虽然没什么影响,最好还是捕获一下。
- 6 回答
- 0 关注
- 272 浏览
添加回答
举报