       {^ref, reply} ->
         Process.demonitor(ref, [:flush])
         {:ok, reply}
+
       {:DOWN, ^ref, _, proc, :noconnection} ->
         exit({reason(:noconnection, proc), {__MODULE__, :yield, [task, timeout]}})
+
       {:DOWN, ^ref, _, _, reason} ->
         {:exit, reason}
     after

      {:DOWN, ^mon, _, _, :shutdown} when type in [:shutdown, :timeout_kill] ->
        Process.demonitor(ref, [:flush])
        flush_reply(ref)
      {:DOWN, ^mon, _, _, :killed} when type == :brutal_kill ->
        Process.demonitor(ref, [:flush])
        flush_reply(ref)
      {:DOWN, ^mon, _, proc, :noproc} ->
        reason = flush_noproc(ref, proc, type)
        flush_reply(ref) || reason
      {:DOWN, ^mon, _, proc, reason} ->
        Process.demonitor(ref, [:flush])
        flush_reply(ref) || {:down, proc, reason}

      {^ref, reply} ->
        Process.demonitor(ref, [:flush])
        reply

      {:DOWN, ^ref, _, proc, reason} ->
        exit({reason(reason, proc), {__MODULE__, :await, [task, timeout]}})
    after
