Tengo una aplicación multiproceso que genera hilos para varios instrumentos de hardware. Cada hilo es básicamente un bucle infinito (durante la vida útil de la aplicación) que sondea el hardware para nuevos datos y activa un evento (que pasa los datos) cada vez que recoge algo nuevo. Hay una única clase de oyente que consolida todos estos instrumentos, realiza algunos cálculos y desencadena un nuevo evento con este cálculo.Eventos vs. Rendimiento
Sin embargo, me pregunto si, dado que hay un solo oyente, sería mejor exponer un método IEnumerable<>
de estos instrumentos, y usar un yield return
para devolver los datos, en lugar de disparar los eventos.
Me gustaría ver si alguien sabe de las diferencias en estos dos métodos. En particular, estoy buscando la mejor confiabilidad, la mejor capacidad para pausar/cancelar operación, mejor para enhebrar, seguridad general, etc.
Además, con el segundo método es posible ejecutar el lazo IEnumerable
en un hilo separado? Muchos de estos instrumentos están vinculados a la CPU, por lo que es vital asegurarse de que cada uno tenga un hilo diferente.
He usado Rx en un nuevo proyecto, y es maravilloso. El problema en este caso es que requerirá una revisión general del código heredado, ya que cambia la forma en que se aborda el problema. Para la próxima versión principal, ya estoy trabajando en esto, pero parece una tarea desalentadora para un pequeño (o) rediseño. – drharris