1 public abstract class BackGroundWork : BackgroundService 2 { 3 /// <summary> 4 /// 创建⼀个取消标记源 5 /// </summary> 6 private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); 7 /// <summary> 8 /// 入参委托 9 /// </summary> 10 private Action<object> action; 11 12 /// <summary> 13 /// 初始化 14 /// </summary> 15 protected void Init() 16 { 17 action = async (e) => 18 { 19 while (true) 20 { 21 DoWork(e); 22 await Task.Delay(TimeSpan.FromSeconds(10)); 23 } 24 }; 25 } 26 /// <summary> 27 /// 执行方法 28 /// </summary> 29 /// <param name="stoppingToken"></param> 30 /// <returns></returns> 31 protected override Task ExecuteAsync(CancellationToken stoppingToken) 32 { 33 Init(); 34 _ = Task.Factory.StartNew(action, cancellationTokenSource.Token); 35 return Task.CompletedTask; 36 } 37 /// <summary> 38 /// 停止执行方法 39 /// </summary> 40 /// <param name="cancellationToken"></param> 41 /// <returns></returns> 42 public override Task StopAsync(CancellationToken cancellationToken) 43 { 44 cancellationTokenSource.Cancel(); 45 return base.StopAsync(cancellationToken); 46 } 47 48 protected abstract void DoWork(object e); 49 50 }
1 2 3 4 5 6 7 8 | public partial class SyncWorker : BackGroundWork { protected override void DoWork( object e) { var service = ServiceLocator.Instance.GetRequiredService<SyncService>(); Task.WaitAll(service.ExecServiceAsync()); } } |
C# BackgroundService服务案例
可以使用三方库,hangfire, topshelf, Quartz. and so on.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2022-01-03 缓存雪崩、缓存击穿和缓存穿透
2022-01-03 Fiddler抓包一键生成代码
2022-01-03 k8s集群,Rancher 是一个完整的软件堆栈
2022-01-03 Kubernetes-Service介绍-服务发现
2019-01-03 用redis实现分布式锁
2016-01-03 Agile/CMMI/Scrum
2016-01-03 gulp