c# .net tasks/threading 控制台应用程序
c# .net tasks/threading console application
我有一个移动文件的控制台应用程序。它最初将文件一个一个地移动。然后我开始探索多线程以便一次移动所有文件。我发现我必须在每个 foreach 循环之后调用 console.read() 才能保留任务 运行。没有这个应用程序关闭。通过这种方法,应用程序即使在完成后也会保持打开状态。是否有人对如何解决此问题有任何建议;
foreach (string file in files)
{
Task.Factory.StartNew(() => { MoveFiles(file, str); });
}
Console.Read();
StartNew()
实际上 returns 一个 Task
对象。您可以将所有这些对象保存在一个列表中,而不是 Console.Read();
执行 Task.WaitAll(tasks.ToArray());
.
最后一次调用将等待任务完成。完成后,您的程序将关闭。
使用 Paralell.Foreach
而不是 foreach
。这是一个 阻塞 调用。
Parallel.ForEach(files, file =>
{
MoveFiles(file, str);
});
顺便说一句:这比立即启动 N 个任务(假设有 10K 个文件)然后等待完成所有任务(byTask.WaitAll)
我有一个移动文件的控制台应用程序。它最初将文件一个一个地移动。然后我开始探索多线程以便一次移动所有文件。我发现我必须在每个 foreach 循环之后调用 console.read() 才能保留任务 运行。没有这个应用程序关闭。通过这种方法,应用程序即使在完成后也会保持打开状态。是否有人对如何解决此问题有任何建议;
foreach (string file in files)
{
Task.Factory.StartNew(() => { MoveFiles(file, str); });
}
Console.Read();
StartNew()
实际上 returns 一个 Task
对象。您可以将所有这些对象保存在一个列表中,而不是 Console.Read();
执行 Task.WaitAll(tasks.ToArray());
.
最后一次调用将等待任务完成。完成后,您的程序将关闭。
使用 Paralell.Foreach
而不是 foreach
。这是一个 阻塞 调用。
Parallel.ForEach(files, file =>
{
MoveFiles(file, str);
});
顺便说一句:这比立即启动 N 个任务(假设有 10K 个文件)然后等待完成所有任务(byTask.WaitAll)