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)