public void Execute(TaskExecuteContext context) { Tracer.Debug($"RedisHashSet clear is executing for '{CacheKey}'."); var set = Client.HGetAll(CacheKey); set.ForEach(s => { if (!string.IsNullOrEmpty(s.Value)) { try { var value = Deserialize(s.Value); if (value != null && value.HasExpired()) { if (Client.HExists(CacheKey, s.Key)) { Client.HDel(CacheKey, s.Key); } } } catch (Exception exp) { Tracer.Error($"RedisHashSet ExpireTaskExecutor throw exception:\n{exp.Output()}"); } } }); }
/// <summary> /// 执行任务。 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task Execute(IJobExecutionContext context) { if (context.MergedJobDataMap["executor"] is ITaskExecutor executor) { var service = context.MergedJobDataMap["serviceProvider"] as IServiceProvider; var arguments = context.MergedJobDataMap["arguments"] as IDictionary <string, object>; var cancellationToken = (CancellationToken)context.MergedJobDataMap["cancellationToken"]; var econtext = new TaskExecuteContext(service, arguments, cancellationToken); executor.Execute(econtext); } }
/// <summary> /// 执行任务。 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task Execute(IJobExecutionContext context) { if (context.MergedJobDataMap["executor"] is IAsyncTaskExecutor executor) { var serviceProvider = context.MergedJobDataMap["serviceProvider"] as IServiceProvider; var arguments = context.MergedJobDataMap["arguments"] as IDictionary <string, object>; var cancellationToken = (CancellationToken)context.MergedJobDataMap["cancellationToken"]; using var scope = serviceProvider.TryCreateScope(); var econtext = new TaskExecuteContext(scope.ServiceProvider, arguments, cancellationToken); await executor.ExecuteAsync(econtext); } }
public void Execute(TaskExecuteContext context) { var cacheMgr = context.ServiceProvider.TryGetService <ICacheManager>(); if (cacheMgr == null) { return; } var barrier = context.Arguments["barrier"]; Tracer.Debug($"CacheClearTaskExecutor is executing for '{barrier}'."); var rootKey = barrier == null ? $"{CACHE_KEY}.keys" : CacheHelper.GetCacheKey(context.ServiceProvider, $"{CACHE_KEY}.keys", barrier); var hashSet = cacheMgr.GetHashSet <string, List <string> >(rootKey, checkExpiration: false); void clearKeys(string key) { try { if (hashSet.TryGet(key, out List <string> subKeys) && subKeys != null) { for (var i = subKeys.Count - 1; i >= 0; i--) { if (!cacheMgr.Contains(subKeys[i])) { subKeys.RemoveAt(i); } } hashSet.Add(key, subKeys); } } catch (Exception exp) { Tracer.Error($"CacheClearTaskExecutor throw exception when the key of '{barrier}-{key}' is cleared:\n{exp.Output()}"); } } hashSet.GetKeys().ForEach(s => { if (cacheMgr is IEnhancedCacheManager ehCache) { ehCache.UseTransaction(string.Concat(rootKey, ":", s, ":Execute"), () => clearKeys(s), TimeSpan.FromSeconds(10)); } else { _locker.LockWrite(() => clearKeys(s)); } }); }
public void Execute(TaskExecuteContext context) { Console.WriteLine(DateTime.Now + " ccc"); }
public async Task ExecuteAsync(TaskExecuteContext context) { Console.WriteLine(DateTime.Now + " bbb"); }