Task.async en Elixir
Tres censos de arrecife corren en procesos paralelos y terminan en el tiempo de uno.
# Task.async starts a process per job; await_many gathers the answers.
survey = fn reef ->
Process.sleep(100)
{reef, :healthy}
end
tasks =
Enum.map(["north", "east", "lagoon"], fn reef ->
Task.async(fn -> survey.(reef) end)
end)
IO.inspect(Task.await_many(tasks), label: "surveys")
IO.puts("three dives, one sleep of waiting")
Cómo funciona
surveysimula trabajo de campo lento conProcess.sleep.Task.asyncarranca un proceso por arrecife y devuelve un handle de cada uno.Task.await_manyjunta las tres respuestas en más o menos un sueño, no tres.
Palabras clave y builtins usados aquí
endfn
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 328
- Tokens
- 81
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 69 segundos.
Paso 2 de 3 en Procesos; paso 23 de 27 en Fundamentos del lenguaje.