コード例 #1
0
 public LocalCacheLock(IBaseCacheStrategy strategy, string resourceName, string key,
                       int?retryCount = null, TimeSpan?retryDelay = null)
     : base(strategy, resourceName, key, retryCount ?? 0, retryDelay ?? TimeSpan.FromMilliseconds(10))
 {
     _localStrategy = strategy;
     LockNow();//立即等待并抢夺锁
 }
コード例 #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="strategy"></param>
 /// <param name="resourceName"></param>
 /// <param name="key"></param>
 /// <param name="retryCount">如果传入null,默认为50</param>
 /// <param name="retryDelay">如果传入null,默认为10毫秒</param>
 protected BaseCacheLock(IBaseCacheStrategy strategy, string resourceName, string key, int?retryCount, TimeSpan?retryDelay)
 {
     _cacheStrategy = strategy;
     _resourceName  = resourceName + key;/*加上Key可以针对某个AppId加锁*/
     _retryCount    = retryCount == null || retryCount == 0 ? DefaultRetryCount : retryCount.Value;
     _retryDelay    = retryDelay == null || retryDelay.Value.TotalMilliseconds == 0 ? DefaultRetryDelay : retryDelay.Value;
 }
コード例 #3
0
 protected RedisCacheLock(IBaseCacheStrategy strategy, string resourceName, string key, int?retryCount,
                          TimeSpan?retryDelay)
     : base(strategy, resourceName, key, retryCount, retryDelay)
 {
     _client = (strategy as RedisObjectCacheStrategy) !.Client;
     //LockNow();//立即等待并抢夺锁
 }
コード例 #4
0
ファイル: BaseCacheLock.cs プロジェクト: zstep/WeiXinMPSDK
 protected BaseCacheLock(IBaseCacheStrategy stragegy, string resourceName, string key, int retryCount, TimeSpan retryDelay)
 {
     _cacheStragegy = stragegy;
     _resourceName  = resourceName + key;/*加上Key可以针对某个AppId加锁*/
     _retryCount    = retryCount;
     _retryDelay    = retryDelay;
 }
コード例 #5
0
 protected BaseCacheLock(IBaseCacheStrategy strategy, string resourceName, string key, int retryCount, TimeSpan retryDelay)
 {
     _cacheStrategy = strategy;
     _resourceName = resourceName + key;/*加上Key可以针对某个AppId加锁*/
     _retryCount = retryCount;
     _retryDelay = retryDelay;
 }
コード例 #6
0
 public CatalogDataService(
     IRequestProvider request,
     IBaseCacheStrategy cache)
 {
     _request = request;
     _cache   = cache;
 }
コード例 #7
0
ファイル: CacheLockWrapper.cs プロジェクト: ofood/WeChat
        public CacheLockWrapper(IBaseCacheStrategy containerCacheStragegy, string resourceName, string key, int retryCount, TimeSpan retryDelay)
        {
            _containerCacheStragegy = containerCacheStragegy;
            _resourceName           = resourceName + key;/*加上Key可以针对某个AppId加锁*/

            if (retryCount != 0 && retryDelay.Ticks != 0)
            {
                LockSuccessful = _containerCacheStragegy.Lock(_resourceName, retryCount, retryDelay);
            }
            else
            {
                LockSuccessful = _containerCacheStragegy.Lock(_resourceName);
            }
        }
コード例 #8
0
 /// <summary>
 /// 创建 LocalCacheLock 实例,并立即尝试获得锁
 /// </summary>
 /// <param name="strategy">LocalObjectCacheStrategy</param>
 /// <param name="resourceName"></param>
 /// <param name="key"></param>
 /// <param name="retryCount"></param>
 /// <param name="retryDelay"></param>
 /// <returns></returns>
 public static ICacheLock CreateAndLock(IBaseCacheStrategy strategy, string resourceName, string key, int?retryCount = null, TimeSpan?retryDelay = null)
 {
     return(new LocalCacheLock(strategy as LocalObjectCacheStrategy, resourceName, key, retryCount, retryDelay).Lock());
 }
コード例 #9
0
 /// <summary>
 /// 【异步方法】创建 LocalCacheLock 实例,并立即尝试获得锁
 /// </summary>
 /// <param name="strategy">LocalObjectCacheStrategy</param>
 /// <param name="resourceName"></param>
 /// <param name="key"></param>
 /// <param name="retryCount"></param>
 /// <param name="retryDelay"></param>
 /// <returns></returns>
 public static async Task <ICacheLock> CreateAndLockAsync(IBaseCacheStrategy strategy, string resourceName, string key, int?retryCount = null, TimeSpan?retryDelay = null)
 {
     return(await new LocalCacheLock(strategy as LocalObjectCacheStrategy, resourceName, key, retryCount, retryDelay).LockAsync().ConfigureAwait(false));
 }
コード例 #10
0
 /// <summary>
 /// 【异步方法】创建 RedisCacheLock 实例,并立即尝试获得锁
 /// </summary>
 /// <param name="strategy">BaseRedisObjectCacheStrategy</param>
 /// <param name="resourceName"></param>
 /// <param name="key"></param>
 /// <param name="retryCount"></param>
 /// <param name="retryDelay"></param>
 /// <returns></returns>
 public static async Task <ICacheLock> CreateAndLockAsync(IBaseCacheStrategy strategy, string resourceName, string key, int?retryCount = null, TimeSpan?retryDelay = null)
 {
     return(await new RedisCacheLock(strategy as BaseRedisObjectCacheStrategy, resourceName, key, retryCount, retryDelay).LockAsync());
 }
コード例 #11
0
 public static CacheLockWrapper InstanceCacheLockWrapper(this IBaseCacheStrategy stragegy, string resourceName, string key)
 {
     return(InstanceCacheLockWrapper(stragegy, resourceName, key, 0, new TimeSpan()));
 }
コード例 #12
0
 public static CacheLockWrapper InstanceCacheLockWrapper(this IBaseCacheStrategy stragegy, string resourceName, string key, int retryCount, TimeSpan retryDelay)
 {
     return(new CacheLockWrapper(stragegy, resourceName, key, retryCount, retryDelay));
 }
コード例 #13
0
ファイル: CacheLockWrapper.cs プロジェクト: ofood/WeChat
 public CacheLockWrapper(IBaseCacheStrategy containerCacheStragegy, string resourceName, string key)
     : this(containerCacheStragegy, resourceName, key, 0, new TimeSpan())
 {
 }
コード例 #14
0
 public LocalCacheLock(IBaseCacheStrategy strategy, string resourceName, string key, int retryCount, TimeSpan retryDelay)
     : base(strategy, resourceName, key, retryCount, retryDelay)
 {
     _localStrategy = strategy;
 }
コード例 #15
0
 public LocalCacheLock(IBaseCacheStrategy strategy, string resourceName, string key, int retryCount, TimeSpan retryDelay)
     :base(strategy,resourceName,key,retryCount,retryDelay)
 {
     _localStrategy = strategy;
 }