thread safe lock example español concurrentbag concurrent .net multithreading reference

.net - safe - multithreading c# español



Entiendo enhebrar en teoría pero no en la práctica en.net (5)

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?




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

  • Control de BackgroundWorker
  • WaitHandles
  • Funciones de devolución de llamada
  • sondeo de un objeto ASyncResult

En general, desea 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 con 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 sepa que un hilo terminará mucho antes, por lo que puede esperar a que termine, haga un poco de trabajo y luego espere a que el resto termine.

Los manejadores 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 funcionará, puede recurrir a la votación.

Puedo pensar en 5 maneras diferentes de obtener un nuevo hilo en .Net, también aproximadamente en orden:

  • SO creado, normalmente como resultado del evento winforms (incluido 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 (). Podrías 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.


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

Tengo una gran descripción de todo lo que un desarrollador de .net necesita comprender para programar aplicaciones multi-hilos.