继承BackgroundService 类: 为什么会写这个东西呢?本人在写消息队列的时候思考过一个问题——比如,每5秒从队列里面取一条消息(一条消息里面又包含了1000条数据),要把这1000条数据
继承 BackgroundService 类:
为什么会写这个东西呢?本人在写消息队列的时候思考过一个问题——比如,每5秒从队列里面取一条消息(一条消息里面又包含了1000条数据),要把这1000条数据处理完所需要的时间远大于5秒,即执行到中间的时候就会获取新的一条消息,并执行新的消息里面的数据,我所存在的疑问是,这个时候第一条消息里面的数据会被怎么执行?所以就写了这样的代码进行了测试!测试的结果是:每一次执行都会开启一条新的线程,而线程内部的数据是互不影响的,每一个线程都会执行到底!
class TimedBackgroundService : BackgroundService { private Timer _timer; private int i = 0; protected override Task ExecuteAsync(CancellationToken stoppingToken) { _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); //每5秒开启一个线程 return Task.CompletedTask; } private void DoWork(object state) { i++; int name = i; //i表示这是第几个线程 for (int j = 0; j < 100; j++) { Console.WriteLine($"这里是线程{name}: 正在执行j = {j}"); Task.Delay(TimeSpan.FromSeconds(1)).Wait(); //等待1秒 } } public override Task StartAsync(CancellationToken cancellationToken) { return ExecuteAsync(cancellationToken); } public override void Dispose() { base.Dispose(); _timer?.Dispose(); } }
调用:
public static void CheckBackgroundService() { TimedBackgroundService server = new TimedBackgroundService(); CancellationToken token = new CancellationToken(); server.StartAsync(token); }