C# 如何异步删除文件夹
我有一个windows服务正在运行,可以从网络驱动器中删除文件夹。我想使删除异步化。如何做到这一点 现在我正在目录中循环并调用C# 如何异步删除文件夹,c#,c#-4.0,asynchronous,C#,C# 4.0,Asynchronous,我有一个windows服务正在运行,可以从网络驱动器中删除文件夹。我想使删除异步化。如何做到这一点 现在我正在目录中循环并调用 Directory.Delete(fullPath, true); 谢谢我会使用任务并行库: Task.Factory.StartNew(path => Directory.Delete((string)path, true), fullPath); 如果是循环,可以使用并行foreach // assuming that you have a list st
Directory.Delete(fullPath, true);
谢谢我会使用任务并行库:
Task.Factory.StartNew(path => Directory.Delete((string)path, true), fullPath);
如果是循环,可以使用并行foreach
// assuming that you have a list string paths.
// also assuming that it does not matter what order in which you delete them
Parallel.ForEach(theListOfDirectories, x => Directory.Delete(x));
很难理解为什么这是服务中的一个要求,他们已经使用线程了。您可以使用另一个。将目录删除放在一个方法中,并异步调用它。很简单。这里有一个很棒的教程。您还可以使用异步回调/事件来发布进度更新;为什么Windows服务应该异步执行操作?无论如何,它都是在后台运行的。异步操作通常用于保持UI的响应性,而不是在长时间运行的操作中冻结它。@OlivierJacot Descombes:windows服务应响应启动/停止请求。@OlivierJacot Descombes:
应用程序。DoEvents
用于WinForms应用程序。Windows服务没有消息循环。+1;比我快。使用更轻量级的方法传递参数,而不是通过本地关闭,这值得称赞。@vcsjones:这会像异步调用该方法,然后由io线程稍后拾取一样吗?@stackoverflowuser这将调用目录。在任务中删除;其中(可能-可能)将是线程池中的线程。这将允许您的代码在另一个线程上执行删除操作时继续运行。@vcsjones这不是针对这里提到的内容吗:?我当然不会过多地讨论异步主题。Task.Factory.StartNew
方法没有明确配置TaskScheduler
参数。不要使用Task.Factory.StartNew
,而是使用Task.Run
来代替.FYI,使用Parallel.ForEach
方法,但不指定要运行的Lead。为了获得一致的行为,最好配置此选项,而不要让并行度由线程池中当前可用的线程数决定。