线程和复制文件应该使用哪些方法?

时间:2014-07-18 03:34:33

标签: c# .net multithreading

我有一个方法可以将文件从一个目录复制到另一个目录。文件将是巨大的,我想使用线程来确保控制台不会锁定。

复制文件时使用线程的最佳方法是什么?我已阅读并且似乎有三种使用线程的方法:Threadpool,Threads,Asynchronous方法。

使用其中一个明显有益吗?

1 个答案:

答案 0 :(得分:2)

如果你想在后台线程上运行它,现在推荐的方法(除非你需要特定的理由)是使用Tasks from the TPL

您可以使用以下代码执行文件复制,该代码将在后台线程上运行。

Task.Run(() => System.IO.File.Copy(someFile, newFile));

如果您需要在任务完成时执行其他代码,则可以继续执行此操作。

Task.Run(() => System.IO.File.Copy(someFile, newFile)).ContinueWith(() => 
    {
        // Some more stuff to do once copy is completed.
    });

修改

另一种方法是,如果要对大量文件执行复制,则要并行运行它们。 TPL库正确处理线程池并确保一切都按预期运行。

Task.Run(() = >
{
    collectionOfFiles.AsParallel.ForAll(file => System.IO.File.Copy(file, newFile));
}

如果需要,还有更多的花哨。

Task.Run(() =>
{
    collectionOfFiles.AsParallel().ForAll(file => 
    {
        string newFile = string.Format(@"C:\{0}", file);
        System.IO.File.Copy(file, newFile);
        // Do more
     });
});

这将在工作线程上并行复制所有文件。