2012-01-20 15 views
5

Tengo un servicio de Windows en ejecución que elimina las carpetas de la unidad de red. Quiero que la eliminación sea asincrónica. ¿Cómo puede hacerse esto?Cómo eliminar una carpeta de forma asíncrona

En este momento estoy bucle a través de los directorios y llamando

Directory.Delete(fullPath, true); 

Gracias

+0

Es muy difícil ver por qué eso sería un requisito en un servicio, ya usan subprocesos. Podrías usar otro. –

+0

¿Por qué debería un servicio de Windows hacer cosas de manera asincrónica? Se ejecuta en segundo plano de todos modos. Las operaciones asincrónicas generalmente se usan para mantener la UI receptiva en lugar de congelarla durante las operaciones de larga ejecución. –

+1

@ OlivierJacot-Descombes: un servicio de Windows debe responder a las solicitudes de inicio/detención. –

Respuesta

9

me gustaría utilizar el Equipo de Parallel Library:

Task.Factory.StartNew(path => Directory.Delete((string)path, true), fullPath); 
+3

+1; golpéame. Y felicitaciones por utilizar el enfoque más ligero de pasar el parámetro en lugar de cerrar el local. –

+0

@vcsjones: ¿será como llamar al método de forma asíncrona y luego será recogido por io thread más tarde? – stackoverflowuser

+2

@stackoverflowuser Esto llamará 'Directory.Delete' en una tarea; que (puede - probablemente) será un hilo del grupo de subprocesos. Esto permitirá que su código continúe mientras la eliminación está sucediendo en otro hilo. – vcsjones

1

Si se recorre, se puede utilizar una foreach paralelo

 

// 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)); 
 
Cuestiones relacionadas