Skip to content

Instantly share code, notes, and snippets.

@jwarlander
Created June 17, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jwarlander/b9da98b00d80c442a3f5 to your computer and use it in GitHub Desktop.
Save jwarlander/b9da98b00d80c442a3f5 to your computer and use it in GitHub Desktop.
Start a set of asynchronous tasks, then collect results into a list
iex(1)> tasks = for n <- 1..100, do: Task.async(fn -> n*n end)
[%Task{pid: #PID<0.61.0>, ref: #Reference<0.0.0.82>},
%Task{pid: #PID<0.62.0>, ref: #Reference<0.0.0.83>},
%Task{pid: #PID<0.63.0>, ref: #Reference<0.0.0.84>},
%Task{pid: #PID<0.64.0>, ref: #Reference<0.0.0.85>},
%Task{pid: #PID<0.65.0>, ref: #Reference<0.0.0.86>},
%Task{pid: #PID<0.66.0>, ref: #Reference<0.0.0.87>},
%Task{pid: #PID<0.67.0>, ref: #Reference<0.0.0.88>},
%Task{pid: #PID<0.68.0>, ref: #Reference<0.0.0.89>},
%Task{pid: #PID<0.69.0>, ref: #Reference<0.0.0.90>},
%Task{pid: #PID<0.70.0>, ref: #Reference<0.0.0.91>},
%Task{pid: #PID<0.71.0>, ref: #Reference<0.0.0.92>},
%Task{pid: #PID<0.72.0>, ref: #Reference<0.0.0.93>},
%Task{pid: #PID<0.73.0>, ref: #Reference<0.0.0.94>},
%Task{pid: #PID<0.74.0>, ref: #Reference<0.0.0.95>},
%Task{pid: #PID<0.75.0>, ref: #Reference<0.0.0.96>},
%Task{pid: #PID<0.76.0>, ref: #Reference<0.0.0.97>},
%Task{pid: #PID<0.77.0>, ref: #Reference<0.0.0.98>},
%Task{pid: #PID<0.78.0>, ref: #Reference<0.0.0.99>},
%Task{pid: #PID<0.79.0>, ref: #Reference<0.0.0.100>},
%Task{pid: #PID<0.80.0>, ref: #Reference<0.0.0.101>},
%Task{pid: #PID<0.81.0>, ref: #Reference<0.0.0.102>},
%Task{pid: #PID<0.82.0>, ref: #Reference<0.0.0.103>},
%Task{pid: #PID<0.83.0>, ref: #Reference<0.0.0.104>},
%Task{pid: #PID<0.84.0>, ref: #Reference<0.0.0.105>},
%Task{pid: #PID<0.85.0>, ref: #Reference<0.0.0.106>},
%Task{pid: #PID<0.86.0>, ref: #Reference<0.0.0.107>},
%Task{pid: #PID<0.87.0>, ref: #Reference<0.0.0.108>},
%Task{pid: #PID<0.88.0>, ref: #Reference<0.0.0.109>},
%Task{pid: #PID<0.89.0>, ref: #Reference<0.0.0.110>},
%Task{pid: #PID<0.90.0>, ref: #Reference<0.0.0.111>},
%Task{pid: #PID<0.91.0>, ref: #Reference<0.0.0.112>},
%Task{pid: #PID<0.92.0>, ref: #Reference<0.0.0.113>},
%Task{pid: #PID<0.93.0>, ref: #Reference<0.0.0.114>},
%Task{pid: #PID<0.94.0>, ref: #Reference<0.0.0.115>},
%Task{pid: #PID<0.95.0>, ref: #Reference<0.0.0.116>},
%Task{pid: #PID<0.96.0>, ref: #Reference<0.0.0.117>},
%Task{pid: #PID<0.97.0>, ref: #Reference<0.0.0.118>},
%Task{pid: #PID<0.98.0>, ref: #Reference<0.0.0.119>},
%Task{pid: #PID<0.99.0>, ref: #Reference<0.0.0.120>},
%Task{pid: #PID<0.100.0>, ref: #Reference<0.0.0.121>},
%Task{pid: #PID<0.101.0>, ref: #Reference<0.0.0.122>},
%Task{pid: #PID<0.102.0>, ref: #Reference<0.0.0.123>},
%Task{pid: #PID<0.103.0>, ref: #Reference<0.0.0.124>},
%Task{pid: #PID<0.104.0>, ref: #Reference<0.0.0.125>},
%Task{pid: #PID<0.105.0>, ref: #Reference<0.0.0.126>},
%Task{pid: #PID<0.106.0>, ref: #Reference<0.0.0.127>},
%Task{pid: #PID<0.107.0>, ref: #Reference<0.0.0.128>},
%Task{pid: #PID<0.108.0>, ref: #Reference<0.0.0.129>},
%Task{pid: #PID<0.109.0>, ...}, %Task{...}, ...]
iex(2)> result_list = Enum.map(tasks, fn t -> Task.await(t) end)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089,
1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116,
2209, 2304, 2401, 2500, ...]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment