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); } }
/// <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>()); }
/// <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); }