我有一个方法可以将文件从一个目录复制到另一个目录。文件将是巨大的,我想使用线程来确保控制台不会锁定。
复制文件时使用线程的最佳方法是什么?我已阅读并且似乎有三种使用线程的方法:Threadpool,Threads,Asynchronous方法。
使用其中一个明显有益吗?
答案 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
});
});
这将在工作线程上并行复制所有文件。