Pregunta

utilizo objetos BackgroundWorker para preformas algunos asíncrono y con hilo cuando sea necesario. De vez en cuando, cuando corro el BackgroundWorker que se ahogue en la mitad de la carrera y no termina. Por lo general lo hace cuando estoy corriendo más de 1 BackgroundWorker al mismo tiempo.

Lo que quiero hacer cuando se atasca es cancelar la operación y volver a ejecutarlo. Mi problema es que no sé cómo detectar cuando se ha estancado. ¿Hay algún código tengo que añadir a "notificar" que el trabajador se ha estancado o no hay ninguna manera de saber?

Gracias,

¿Fue útil?

Solución

Usted debe depurar el código y averiguar por qué su estancamiento .

  • ¿Tiene un punto muerto multiproceso?
  • ¿Se agotaron las agrupaciones de recursos?
  • ¿Está esperando indefinidamente en un recurso de red?
  • ¿Es una excepción lanzada a mediados proceso?

BackgroundWorker proporciona la siguiente devolución de llamada:

  • DoWork, que se llama antes de que comience su trabajo.
  • RunWorkerCompleted, que se llama cuando su trabajo está hecho.

Se podría extender esto con un envoltorio para registrar una advertencia si la acción tarda más de una cierta cantidad de tiempo si desea aplicar algún tipo de nivel de servicio para las acciones asincrónicos. (Ej. Se inicia un temporizador cuando se llama DoWork y cuando el tiempo termine ingrese la advertencia, temporizador claro cuando completa)

Otros consejos

Eso depende enteramente de lo que entendemos por "estancado". Si ha conseguido un punto muerto el subproceso de trabajo, entonces usted tendrá que encontrar el problema y deshacer el lío. Si se lanzar una excepción, entonces el RunWorkerCompleted evento debe disparar, con un Error no nulo en el caso-args.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top