in reply to GET a file without waiting for the result?

You could designate a (single!) thread whose job is “to do fetches.”   It would service a thread-safe queue:   sleep until a filename appears on the queue, pop it off, fetch the file, and post a completion-message onto some other queue.   The number of occurrences of this thread would determine how many fetches could be going on simultaneously.