public async Task <bool> ReleaseLockAsync(string key) { await RaceCondition.RunAsync(async() => { await Cache.LockReleaseAsync(new RedisKey(key), new RedisValue(FixedValue)); }, key).NoContext(); return(true); }
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); }
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); } }