ConnectToRedisAsync

This commit is contained in:
Haiping Chen 2024-11-05 13:29:06 +00:00
parent d4ccc53a6e
commit 040bd7e406

View file

@ -15,7 +15,7 @@ public class DistributedLocker
public async Task<T> Lock<T>(string resource, Func<Task<T>> 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)
{