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.