using Microsoft.Extensions.Logging; using RedisHelper; using ScheduledService; using UserService.User; namespace UserService.Jobs; public class RankingRewardJob : CronJobService { private readonly IUserService _userService; private readonly IDistributedLock _distributedLock; private const string LockKey = "lock:rankingreward"; public RankingRewardJob( 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.DailyRankingReward(); }, expiry: 600); } }