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

关于Task批量动态定义的问题

            DirectoryInfo Di = new DirectoryInfo(LibPath);
            DirectoryInfo[] directory = Di.GetDirectories();
            int LibNo = directory.Length;
            Task<DataTable>[] ts = new Task<DataTable>[LibNo];
            for (int i = 0; i < LibNo; ++i)
            {
                ts[i] = Task.Factory.StartNew(() => Single_Lib(directory[i]));
            }
            Task.WaitAll(ts);

有这么一段代码,是想在路径“LibPath”中获取文件夹数,即库文件夹的数量LibNo,然后开启LibNo个Task线程,使用上面代码的时候,运行到最后一行Task.WaitAll(ts)时,会出现第7行”directory[i]索引超出了数组界限“的错误。
把for循环部分改为:

            if (LibNo >= 5)
            {
                ts[0] = Task.Factory.StartNew(() => Single_Lib(directory[0]));
                ts[1] = Task.Factory.StartNew(() => Single_Lib(directory[1]));
                ts[2] = Task.Factory.StartNew(() => Single_Lib(directory[2]));
                ts[3] = Task.Factory.StartNew(() => Single_Lib(directory[3]));
                ts[4] = Task.Factory.StartNew(() => Single_Lib(directory[4]));
            }
            if (LibNo >= 6)
                ts[5] = Task.Factory.StartNew(() => Single_Lib(directory[5]));
            if (LibNo >= 7)
                ts[6] = Task.Factory.StartNew(() => Single_Lib(directory[6]));