ASP.NET Core 7项目启动的时候自动启动 十个定时任务 间隔不一 运行起来后互不影响
时间: 2024-04-12 14:30:51 浏览: 116
ASP.NET定时任务
4星 · 用户满意度95%
要在ASP.NET Core 7项目启动时自动启动十个定时任务,并且这些任务的执行间隔不同且互不影响,您可以使用`IHostedService`和`Timer`的组合,并为每个任务创建单独的定时器。下面是一个示例代码:
```csharp
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
public class MyTimedService : IHostedService, IDisposable
{
private Timer[] _timers;
private int[] _intervals = { 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100 }; // 定时任务执行的间隔时间(以毫秒为单位)
public Task StartAsync(CancellationToken cancellationToken)
{
_timers = new Timer[_intervals.Length];
for (int i = 0; i < _intervals.Length; i++)
{
int taskId = i; // 避免循环变量在闭包中引起的问题
_timers[taskId] = new Timer(DoWork, taskId, TimeSpan.Zero, TimeSpan.FromMilliseconds(_intervals[taskId]));
}
return Task.CompletedTask;
}
private void DoWork(object state)
{
int taskId = (int)state;
// 执行定时任务的逻辑
// 使用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`方法中注册这个定时任务服务:
```csharp
using Microsoft.Extensions.DependencyInjection;
public void ConfigureServices(IServiceCollection services)
{
// 省略其他代码...
services.AddHostedService<MyTimedService>();
// 省略其他代码...
}
```
以上代码将在应用启动时自动启动十个定时任务,并且这些任务的执行间隔不同且互不影响。您可以根据需要修改定时任务的数量和执行逻辑,以及每个任务的间隔时间。
阅读全文