diff --git a/src/Infrastructure/BotSharp.Core/Infrastructures/DistributedLocker.cs b/src/Infrastructure/BotSharp.Core/Infrastructures/DistributedLocker.cs index a5373cd1..25c3a047 100644 --- a/src/Infrastructure/BotSharp.Core/Infrastructures/DistributedLocker.cs +++ b/src/Infrastructure/BotSharp.Core/Infrastructures/DistributedLocker.cs @@ -15,7 +15,7 @@ public class DistributedLocker public async Task Lock(string resource, Func> action, int timeoutInSeconds = 30) { - await ConnectToRedis(); + await ConnectToRedisAsync(); var timeout = TimeSpan.FromSeconds(timeoutInSeconds); @@ -31,25 +31,35 @@ public class DistributedLocker } } - public async Task Lock(string resource, Action action, int timeoutInSeconds = 30) + public void Lock(string resource, Action action, int timeoutInSeconds = 30) { - await ConnectToRedis(); + ConnectToRedis(); var timeout = TimeSpan.FromSeconds(timeoutInSeconds); var @lock = new RedisDistributedLock(resource, connection.GetDatabase()); - await using (var handle = await @lock.TryAcquireAsync(timeout)) + using (var handle = @lock.TryAcquire(timeout)) { if (handle == null) { Serilog.Log.Logger.Error($"Acquire lock for {resource} failed due to after {timeout}s timeout."); - } - action(); + else + { + action(); + } } } - private async Task ConnectToRedis() + private void ConnectToRedis() + { + if (connection == null) + { + connection = ConnectionMultiplexer.Connect(_settings.Redis); + } + } + + private async Task ConnectToRedisAsync() { if (connection == null) {