protected LockResult <TSource> TryGetLock <TSource>(RedisClient client, string key, TimeSpan lockAgeTimeout, TimeSpan lockAcquisitionTimeout = new TimeSpan())
        {
            var dlmLock = client.AcquireDlmLock(key, lockAcquisitionTimeout, lockAgeTimeout);

            if (!dlmLock.IsAcquired)
            {
                return(LockResult <TSource> .Fail(key));
            }

            var value = dlmLock.GetValue <TSource>(client);

            return(new LockResult <TSource>(key, true, new LockHandleWrapper(key, dlmLock), value));
        }