using Microsoft.Extensions.Logging; using RedisHelper; using ScheduledService; using UserService.User; namespace UserService.Jobs; public class EveryHourTask : CronJobService { private readonly IUserService _userService; private readonly IDistributedLock _distributedLock; private const string LockKey = "lock:everyhour"; public EveryHourTask( IScheduleConfig config, IUserService userService, IDistributedLock distributedLock) : base(config.CronExpression, config.TimeZoneInfo) { _userService = userService; _distributedLock = distributedLock; } public override async Task DoWork(CancellationToken cancellationToken) { await _distributedLock.TryExecuteAsync(LockKey, async () => { await _userService.EveryHourTask(); }, expiry: 300); } }