According to MSDN, SemaphoreSlim.WaitAsync
may throw:
ObjectDisposedException
- If the semaphore has been disposed
ArgumentOutOfRangeException
- if you choose the overload which accepts an int
and it is a negative number (excluding -1)
In both cases, the SemaphoreSlim
wont acquire the lock, which makes it unnessacery to release it in a finally
block.
One thing to note is if the object is disposed or null in the second example, the finally block will execute and either trigger another exception or call Release
which might have not acquired any locks to release in the first place.
To conclude, I would go with the former for consistency with non-async locks and avoiding exceptions in the finally
block
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…