2010-03-10 12 views

Respuesta

2

Personalmente, utilizaría una instancia de BackgroundWorker para cada una de sus tareas. Sin embargo, tenga en cuenta que puede llamar varias veces al mismo método delegado en varias instancias diferentes de subprocesos.

Al tener una tarea de BackgroundWorker por método largo, tendrá mucho control sobre sus métodos. Además, según mi entendimiento, una vez que una instancia de un BackgroundWorker realiza una tarea, está ocupada con esta tarea de fondo y, por lo tanto, no está disponible para otros. Sin embargo, quizás esté equivocado, pero así es como lo haría, ya que su controlador de eventos DoWork() solo puede hacer lo que se le pide que haga para este BackgroundWorker. Por lo tanto, me parece imposible realizar tareas totalmente diferentes para una sola instancia de BackgroundWorker.

¿Le sirve de ayuda?

+0

Sí, esta ayuda. Mis métodos largos no tienen ejecuciones consecutivas. Te usaré tu recomendación. Lo siento por un inglés pobre ... – wallybh

+1

¡No te molestes, soy francófono! = P Hehehe ... –

+1

Quizás esto ayude si divide el desacoplamiento de su método long-as-in-long-running;) en varias piezas más pequeñas y escudilla las piezas pequeñas en otros BackgroundWorkers múltiples. Todo depende de si estos métodos se pueden masticar en pedazos de código más pequeños, si entiendes lo que quiero decir. –

2

En resumen:

Ventajas en uno BackgroundWorker:

  1. permite controlar el orden de la ejecución para el método múltiple. Sin embargo, esto también es una desventaja, porque si usas varios BackgroundWorkers, "supones" que se ejecutan de forma paralela y no tienen que preocuparse por el orden;

  2. Menor sobrecarga para la creación y eliminación de hilos (si es posible, use la misma instancia siempre, pero eso no siempre es posible, dependiendo de qué inicie el proceso. No es posible si quiere que se haga al mismo tiempo);

  3. Si desea comunicarse entre hilos, puede acumular una comunicación por lotes y hacerlo de manera más eficiente. Además, puede ahorrarte algo de esa comunicación si todos los métodos se ejecutan en el mismo hilo.

Ventajas en múltiples BackgroundWorkers:

  1. El paralelismo mencionada anteriormente;

  2. Cada end-of-process puede usar otro delegado y, por lo tanto, realizar alguna otra operación.

Hope it helps!

Cuestiones relacionadas