Para esperar a que múltiples goroutines terminen, podemos usar un grupo de espera. |
|
|
|
|
|
Esta es la función que ejecutaremos en cada goroutine. |
|
Dormir para simular una tarea costosa. |
|
|
|
Este WaitGroup se utiliza para esperar a que todas las goroutines lanzadas aquí terminen. Nota: si un WaitGroup es explícitamente pasado a funciones, debe hacerse por puntero. |
|
Lanzar varias goroutines e incrementar el contador de WaitGroup para cada una. |
|
Evitar la reutilización del mismo valor de |
|
Envolver la llamada al trabajador en un cierre que se asegure de decirle al WaitGroup que este trabajador ha terminado. De esta manera, el trabajador mismo no tiene que ser consciente de los primitivos de concurrencia involucrados en su ejecución. |
|
Bloquear hasta que el contador de WaitGroup vuelva a 0; todos los trabajadores notificaron que han terminado. |
|
Nota que este enfoque no tiene una manera sencilla de propagar errores desde los trabajadores. Para casos de uso más avanzados, considera usar el paquete errgroup. |
|
|
|
El orden en que los trabajadores comienzan y terminan probablemente sea diferente en cada invocación. |
Siguiente ejemplo: Rate Limiting.