コード例 #1
0
        public async Task <bool> ReleaseLockAsync(string key)
        {
            await RaceCondition.RunAsync(async() =>
            {
                await Cache.LockReleaseAsync(new RedisKey(key), new RedisValue(FixedValue));
            }, key).NoContext();

            return(true);
        }
コード例 #2
0
        private async Task SumAsync2(int v, string key)
        {
            Func <Task> action = async() => await CountAsync(v);

            List <Task> tasks = new List <Task>();

            for (int i = 0; i < 20; i++)
            {
                tasks.Add(RaceCondition.RunAsync(action, key));
            }
            await Task.WhenAll(tasks);
        }
コード例 #3
0
        public async Task <bool> AcquireLockAsync(string key, TimeSpan expiringTime = default)
        {
            try
            {
                if (expiringTime == default)
                {
                    expiringTime = TimeSpan.FromSeconds(10);
                }
                RaceConditionResponse response = await RaceCondition.RunAsync(async() =>
                {
                    await Cache.LockTakeAsync(new RedisKey(key), new RedisValue(FixedValue), expiringTime);
                }, key).NoContext();

                return(response.IsExecuted && !response.InException);
            }
            catch
            {
                return(false);
            }
        }