我有一个移动文件的控制台应用程序。它最初将文件移动一个。然后我开始探索多线程以便一次移动所有文件。我发现我必须在每个foreach循环之后调用console.read()以保持任务运行。如果没有这个应用关闭。使用这种方法,即使完成,应用程序仍保持打开状态。 Doeas任何人都有关于如何解决这个问题的任何建议;
foreach (string file in files)
{
Task.Factory.StartNew(() => { MoveFiles(file, str); });
}
Console.Read();
答案 0 :(得分:4)
使用target/
代替Paralell.Foreach
。这是一个阻止调用。
foreach
顺便说一句:它比一次启动 N 任务(假设有10K文件)然后等待完成所有任务(通过 Task.WaitAll )< / p>
答案 1 :(得分:1)
StartNew()
实际返回Task
个对象。您可以将所有这些对象保存在列表中,而不是Console.Read();
执行Task.WaitAll(tasks.ToArray());
。
最后一次通话将等待任务完成。完成后,您的程序将关闭。