我用多线程写的代码,为什么和单线程速度差不多呢?
代码如下:
Task[] tasks = new Task[end - start + 1];
for (int i = start; i <= end; i++)
{
//tasks[i - start] = Task.Factory.StartNew(() =>
tasks[i - start] = new Task(() =>
{
if (importCts.IsCancellationRequested)
{
//close you window
}
else
{
download(token, this.tbxDir.Text, end);
}
}, ctstoken);
tasks[i - start].ContinueWith((a) => { info1(); });
tasks[i - start].Start();
}
Task.WaitAll(tasks);
download(token, this.tbxDir.Text, end)是使用HttpWebRequest下载不同id代码的文件。
我用多线程写的代码,为什么和单线程速度差不多呢?还不如我人工多开下载快呢?
为什么呢?貌似task没起啥作用,还是windows对一个进程下载文件有数量限制?
------解决方案--------------------其它的不做评论。
但是你使用lamda表达式的时候,就应该了解它的一些负面影响。
其中之一:就是在for循环中,不在能lamda表达式中使用一些变量。
你可以使用IL反汇编生成的代码出来看一下,就懂了。
-----