When to use Semaphore instead of Dispatch Group? When to use Semaphore instead of Dispatch Group? swift swift