public async Task <bool> TryAcquireAsync()
        {
            try
            {
                var lockAcquired = await _redisClient.ExecuteAsync(
                    db => db.LockTakeAsync(_lockKey, _lockGuid.ToString(), _leaseDuration)
                    );

                if (lockAcquired && _extensionInterval.HasValue)
                {
                    _extendLockTimer = new Timer(
                        ExtendLock, null, _extensionInterval.Value.Milliseconds,
                        _extensionInterval.Value.Milliseconds);
                }

                return(lockAcquired);
            }
            catch (Exception ex)
            {
                _exceptionHandler?.Invoke(ex);
                return(false);
            }
        }
Exemple #2
0
        /// <summary>
        /// 得到指定Set中的项目
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="redisClient">Redis客户端实例</param>
        /// <param name="setName">Set键值</param>
        /// <returns>此Set中的所有项目,以数组的形式返回</returns>
        public static T[] GetSet <T>(this IRedisClient redisClient, string key)
        {
            List <T> items = new List <T>();

            var t = redisClient.ExecuteAsync("smembers", key);

            t.Wait();

            if (t.Result.AsMultiBulk().Count() > 0)
            {
                foreach (var item in t.Result.AsMultiBulk())
                {
                    items.Add(item.As <T>());
                }
            }
            return(items.ToArray <T>());
        }
Exemple #3
0
        /// <summary>
        /// 得到指定Set中的项目(异步)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="redisClient">Redis客户端实例</param>
        /// <param name="setName">Set键值</param>
        /// <returns>此Set中的所有项目,以数组的形式返回</returns>
        public static async Task <T[]> GetSetAsync <T>(this IRedisClient redisClient, string key)
        {
            var task = redisClient.ExecuteAsync("smembers", key);

            var result = await task.ContinueWith <T[]>(res =>
            {
                List <T> items = new List <T>();
                if (res.Result.AsMultiBulk().Count() > 0)
                {
                    foreach (var item in res.Result.AsMultiBulk())
                    {
                        items.Add(item.As <T>());
                    }
                }
                return(items.ToArray <T>());
            });

            return(result);
        }