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



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

在复制文件时使用线程的最佳方法是什么?我已经读了,似乎有三种方法使用线程:线程池,线程,异步方法。

使用其中一个比另一个有明显的好处吗?

如果你想在后台线程上运行它,现在推荐的方法(除非你有特殊的理由不这样做)是使用TPL中的Tasks

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

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

如果您需要在任务完成后执行额外的代码,您可以使用continuation来执行。

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
     });
});

这将复制所有的文件,并行地,在一个工作线程。

最新更新