ASP.NET Core 7项目启动的时候自动启动 十个不同的定时任务 每隔200ms执行一次
时间: 2024-04-12 08:30:25 浏览: 131
要现在ASP.NET Core 7项目启动时自动启动十个不同的定时任务,并且每个任务都每隔200ms执行一次,您可以使用IHostedService
和Timer
的组合。下面是一个示例代码:
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
public class MyTimedService : IHostedService, IDisposable
{
private Timer[] _timers;
private int _interval = 200; // 定时任务执行的间隔时间(以毫秒为单位)
private int _numTasks = 10; // 定时任务的数量
public Task StartAsync(CancellationToken cancellationToken)
{
_timers = new Timer[_numTasks];
for (int i = 0; i < _numTasks; i++)
{
int taskId = i; // 避免循环变量在闭包中引起的问题
_timers[taskId] = new Timer(DoWork, taskId, TimeSpan.Zero, TimeSpan.FromMilliseconds(_interval));
}
return Task.CompletedTask;
}
private void DoWork(object state)
{
int taskId = (int)state;
// 执行定时任务的逻辑
// 每隔200ms执行一次,taskId表示任务的编号
}
public Task StopAsync(CancellationToken cancellationToken)
{
foreach (var timer in _timers)
{
timer?.Change(Timeout.Infinite, 0);
}
return Task.CompletedTask;
}
public void Dispose()
{
foreach (var timer in _timers)
{
timer?.Dispose();
}
}
}
然后,在Startup.cs
文件的ConfigureServices
方法中注册这个定时任务服务:
using Microsoft.Extensions.DependencyInjection;
public void ConfigureServices(IServiceCollection services)
{
// 省略其他代码...
for (int i = 0; i < 10; i++)
{
services.AddSingleton<MyTimedService>();
}
// 省略其他代码...
}
以上代码将在应用启动时自动启动十个不同的定时任务,并且每个任务都会每隔200ms执行一次。通过在ConfigureServices
方法中循环注册MyTimedService
服务,可以创建多个实例,每个实例都对应一个不同的定时任务。您可以根据需要修改定时任务的数量、执行逻辑和间隔时间。