Puede crear un evento (por ejemplo, ManualResetEvent
) en cada hilo y mantenerlo en una lista sincronizada (utilizando el constructo lock
). Establezca el evento o elimínelo de la lista cuando la tarea finalice.
Cuando desee unirse, puede usar WaitHandle.WaitAll
(MSDN documentation) para esperar a que se sigan todos los eventos.
Es un truco, pero no veo cómo reducirlo a algo más simple.
Editar: adicionalmente, podría asegurarse de que no se publiquen nuevos eventos, luego espere unos segundos. Si son de corta duración, no tendrás ningún problema. Incluso más simple, pero más hacky.
Por último, si es solo un corto período de tiempo, el servicio no se cerrará hasta que todos los hilos hayan desaparecido (a menos que sean hilos de fondo); entonces, si es poco tiempo, al administrador de control de servicios no le importará ni un segundo, puede dejar que caduque, según mi experiencia.
Deben ser efímeros, pero para mi caso de uso, necesito más seguridad que "debería funcionar". Estoy pensando en usar un contador de subprocesos entrelazados para rastrear la cantidad de subprocesos en el grupo y esperar que iguale el cero. – recursive
En realidad, me gusta su primera sugerencia mejor que el contador. – recursive