 
   In other words, **do not**:
 
-      Task.start_link fn ->
+      Task.start_link(fn ->
         do_something()
         ...
-      end
+      end)
 
       # Wait until work is done
       Process.sleep(2000)

  But **do**:

      parent = self()
      Task.start_link fn ->
        do_something()
        send parent, :work_is_done
        ...
      end

      receive do
        :work_is_done -> :ok
      after
        30_000 -> :timeout # Optional timeout
      end

  For cases like the one above, `Task.async/1` and `Task.await/2` are

  Instead **do**:

      {:ok, pid} =
        Task.start_link(fn ->
          ...
        end)

      ref = Process.monitor(pid)

      receive do
        {:DOWN, ^ref, _, _, _} -> :task_is_down
      after
        # Optional timeout
        30_000 -> :timeout
      end

  """
