Fork me on GitHub
C# BackgroundService服务案例
复制代码
 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.

posted on   HackerVirus  阅读(20)  评论(0编辑  收藏  举报
编辑推荐:
· 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
点击右上角即可分享
微信分享提示