async queue & semaphore