typestar

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

  1. survey simula trabajo de campo lento con Process.sleep.
  2. Task.async arranca un proceso por arrecife y devuelve un handle de cada uno.
  3. Task.await_many junta las tres respuestas en más o menos un sueño, no tres.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Procesos; paso 23 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →