Tim*_*mmo 5 .net c# arrays asynchronous task
我正在.NET中创建一个文件下载器,它使用异步任务从服务器下载文件数组.但是,即使我创建Task[]并返回string[]相同的长度.
这是我的方法:
public static string[] DownloadList(string[] urlArray, string[] toPathArray, string login = "", string pass = "", bool getExt = false)
{
Console.WriteLine("DownloadList({0}, {1}, {2}, {3}, {4})", urlArray, toPathArray, login, pass, getExt);
try {
returnedArray = new string[urlArray.Length];
Task[] taskArray = new Task[urlArray.Length];
for (int i = 0; i < urlArray.Length; i++)
{
Thread.Sleep(1000);
Console.WriteLine("i = {0}", i);
Task task = new Task(() => { returnedArray[i] = Download(urlArray[i], toPathArray[i], login, pass, getExt, true); });
task.Start();
taskArray[i] = task;
}
Task.WaitAll(taskArray);
Thread.Sleep(1000);
Console.WriteLine();
Console.WriteLine("Done! Press Enter to close.");
Console.ReadLine();
return returnedArray;
}
catch(Exception e)
{
Console.WriteLine();
Console.WriteLine(e.Message);
Console.ReadLine();
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
和例外:
这指向这一行:
我知道这会让我错过一些愚蠢的东西,但是我正在喋喋不休地试图解决它.我在这里先向您的帮助表示感谢!
它看起来像访问修改关闭问题.复制i到本地变量:
for (int i = 0; i < urlArray.Length; i++)
{
int index = i;
Thread.Sleep(1000);
Console.WriteLine("i = {0}", index );
Task task = new Task(() => { returnedArray[index] = Download(urlArray[index], toPathArray[index], login, pass, getExt, true); });
task.Start();
taskArray[index] = task;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
711 次 |
| 最近记录: |