Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何异步删除文件夹_C#_C# 4.0_Asynchronous - Fatal编程技术网

C# 如何异步删除文件夹

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

我有一个windows服务正在运行,可以从网络驱动器中删除文件夹。我想使删除异步化。如何做到这一点

现在我正在目录中循环并调用

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。为了获得一致的行为,最好配置此选项,而不要让并行度由
线程池中当前可用的线程数决定。