1 using Microsoft.Extensions.Configuration; 2 using Microsoft.Extensions.Hosting; 3 using Orleans; 4 using Star.Helpers; 5 using Star.IModuleServices.Common.Interfaces.System; 6 using Star.IModuleServices.Common.Models.System.SettingHotUpdate.Responses; 7 using System; 8 using System.Collections.Concurrent; 9 using System.Collections.Generic;10 using System.Threading;11 using System.Threading.Tasks;12 using Star.Service.Project.Admin.Tool.ConfigTime;13 namespace Star.Service.Project.Admin.Tool.ConfigTime14 {15 /// 16 /// 简单的定时任务执行17 /// 18 public class TimedExecutService : BackgroundService19 {20 protected override async Task ExecuteAsync(CancellationToken stoppingToken)21 {22 try23 {24 Console.WriteLine(DateTime.Now.ToString() + "BackgroundService:启动");25 26 while (!stoppingToken.IsCancellationRequested)27 {28 await Task.Delay(5000, stoppingToken); //启动后5秒执行一次 (用于测试)29 //数据源30 ApiResult<List> list = new ApiResult<List>();31 try32 {33 var cluster = Ioc.GetService();34 list = await cluster.GetGrain(0).GetList("Star.Service.Project.Admin");35 }36 catch (Exception ex)37 {38 throw new Exception("未获取到相关配置:" + ex.Message);39 }40 41 if (list.Data.Count <= 0)42 {43 throw new Exception("未获取到相关配置");44 }45 //自定义数据处理46 ConfigData.Data = new ConcurrentDictionary<string, string>();47 list.Data.ForEach(c =>48 {49 ConfigData.Data[c.K] = c.V;50 });51 Console.WriteLine(DateTime.Now.ToString() + " 执行逻辑");52 }53 Console.WriteLine(DateTime.Now.ToString() + "BackgroundService:停止");54 }55 catch (Exception ex)56 {57 if (!stoppingToken.IsCancellationRequested)58 {59 Console.WriteLine(DateTime.Now.ToString() + "BackgroundService:异常" + ex.Message + ex.StackTrace);60 }61 else62 {63 Console.WriteLine(DateTime.Now.ToString() + "BackgroundService:停止");64 }65 }66 }67 68 }69 }
注入定时任务:
services.AddSingleton