An asynchronous .NET Standard 2.0 library that allows you to lock based on a key (keyed semaphores), limiting concurrent threads sharing the same key to a specified number, with optional pooling for reducing memory allocations.
Allowed optional continueOnCapturedContext, defaulting to false. Contributed by @c0nd3v.
Allowing optionally passing on continueOnCapturedContext. Contributed by c0nd3v
Fixed potential unnecessary slowdown.
Implemented IDisposable.
Created an alternate method for locking using striped locks. For a list of pros and cons of both techniques, please visit the wiki at https://github.com/MarkCiliaVincenti/AsyncKeyedLock/wiki
Synchronous Lock methods with timeouts now must use the out parameter. Async LockAsync methods with timeouts now return AsyncKeyedLockTimeoutReleaser<TKey> instead of IDisposable. IsInUse correctness improved and will now wait on locks to allow concurrent operations to finish before reporting back.
Minor optimizations.
Optimizations and fixing of more rare race conditions.
Fixed rare race condition (thanks for pointing it out Theodor Zoulias), added limit to avoid unnecessary attempts to fill pool when initialFill > capacity.