According to MSDN, it SemaphoreSlim.WaitAsynccan throw:
ObjectDisposedException - If the semaphore was located
ArgumentOutOfRangeException- if you choose an overload that accepts int, and that is a negative number (excluding -1)
In both cases, SemaphoreSlimit will not receive a lock, which makes it unable to release it in the block finally.
, , finally Release, , , .
finally