tryAcquire
Tries to acquire a permit from this semaphore. This function is marked as a suspend function because it may perform I/O operations, but it won't suspend in case that no permit is available at the moment.
Return
permit if a permit was acquired and null otherwise.