.NET Core Web Api 每100ms执行一次的定时任务
时间: 2023-07-04 22:07:18 浏览: 52
在.NET Core Web Api中执行定时任务可以使用System.Threading.Timer类实现。可以在Startup.cs文件的Configure方法中添加以下代码:
```csharp
services.AddSingleton<ITimerService, TimerService>();
```
这里我们创建了一个名为TimerService的类来执行我们的定时任务,需要实现ITimerService接口:
```csharp
public interface ITimerService
{
void Start();
void Stop();
}
```
然后在TimerService类中实现ITimerService接口:
```csharp
public class TimerService : ITimerService
{
private readonly Timer _timer;
private readonly ILogger<TimerService> _logger;
public TimerService(ILogger<TimerService> logger)
{
_logger = logger;
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMilliseconds(100));
}
private void DoWork(object state)
{
_logger.LogInformation("TimerService is working.");
}
public void Start()
{
_timer.Change(TimeSpan.Zero, TimeSpan.FromMilliseconds(100));
}
public void Stop()
{
_timer.Change(Timeout.Infinite, Timeout.Infinite);
}
}
```
在构造函数中创建了一个新的Timer对象,并指定了定时任务的执行间隔为100ms。在DoWork方法中编写我们的定时任务代码,这里我们只是简单地输出一条日志信息。
最后在Controller中注入TimerService并调用Start方法启动定时任务:
```csharp
[ApiController]
[Route("[controller]")]
public class TimerController : ControllerBase
{
private readonly ITimerService _timerService;
public TimerController(ITimerService timerService)
{
_timerService = timerService;
}
[HttpGet("start")]
public IActionResult Start()
{
_timerService.Start();
return Ok();
}
[HttpGet("stop")]
public IActionResult Stop()
{
_timerService.Stop();
return Ok();
}
}
```
这样就可以在每100ms执行一次定时任务了。注意,Timer类是线程池线程,因此在进行长时间运行的任务时应该使用异步方法。