Asynchronous execution is more efficient if and only if the time spent waiting for a call to complete is longer than the time spent checking if the call has completed plus the time spent dispatching to another asynchronous call (and waiting vs checking if it is completed, and so on).
Remember that concurrency is not parallelism, it's not about the number of threads being used.
Remember that concurrency is not parallelism, it's not about the number of threads being used.