日期:2014-05-17  浏览次数:20830 次

我用多线程写的代码,为什么和单线程速度差不多呢?
代码如下:            

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反汇编生成的代码出来看一下,就懂了。
-----