2008-09-08 5 views
7

Tengo una comprensión básica de cs-major de multi-threading pero nunca he tenido que hacer nada más allá de temporizadores simples en una aplicación. ¿Alguien sabe de un buen recurso que me dará un recorrido sobre cómo trabajar con aplicaciones de subprocesos múltiples, explicando los conceptos básicos y tal vez presentando algunas de las cosas más difíciles?Entiendo el enhebrado en teoría pero no en la práctica en .net

Respuesta

5

Hay 4 formas básicas para sincronizar los hilos en .Net:

  • de control BackgroundWorker
  • WaitHandles
  • funciones de devolución de llamada
  • un objeto de votación asyncResult

Generalmente desea para comenzar en la parte superior de la lista y trabajar hacia abajo. Eso significa primero mirar y ver si un control de trabajador de fondo es apropiado para la situación. Sin embargo, casi asume formularios de Windows y que solo está generando un nuevo hilo.

Entonces, intente los manejadores de espera. Los manejadores de espera son buenos para coordinar varios hilos juntos. Puedes echarlos a todos y esperar a que todos terminen, o si quieres mantener activo un determinado número, esperas uno solo y generas el siguiente cuando termine. O tal vez sepas que un hilo terminará mucho antes, por lo que puedes esperar a que termine, hacer un poco de trabajo y esperar a que el resto termine.

Las manijas de espera pueden parecer demasiado si, por ejemplo, solo está generando un hilo adicional y no quiere bloquear hasta que haya terminado. Entonces puede usar una devolución de llamada, de modo que la función que designe se invocará tan pronto como se complete la secuencia.

Finalmente, si y solo si por alguna razón ninguno de los anteriores funciona, puede recurrir a la votación.

me ocurre de 5 maneras diferentes de obtener un nuevo hilo en .Net, también más o menos en orden:

  • OS creado, normalmente como resultado de eventos de Windows Forms (incluyendo el BackgoundWorker).
  • Obj.Begin ___()/Fin ____(). Ciertas clases de CLR ya tienen definidos estos métodos asíncronos y, obviamente, desea utilizarlos cuando estén disponibles.
  • ThreadPool.QueueUserWorkItem(). Use esto la mayor parte del tiempo para crear sus propios hilos.
  • Delegate.BeginInvoke()/EndInvoke(). Puede ajustar cualquier método de esta manera.
  • Thread.Start(). Usted podría hacerlo de esta manera, pero leí algo recientemente (no tengo el enlace ahora) que si QueueUserWorkItem no funciona, el método delegado es probablemente mejor.
1

Uno de los mejores recursos que conozco sobre el tema es el "enhebrado en C#" libro: http://www.albahari.com/threading/

I tiene una gran visión general de todos un desarrollador .NET necesidad de entender para programar aplicaciones de múltiples hilos.