在 ASP.NET Web API 中创建一个线程每 X 秒执行一次特定代码
Posted
技术标签:
【中文标题】在 ASP.NET Web API 中创建一个线程每 X 秒执行一次特定代码【英文标题】:Make a thread to execute certain code every X seconds, in ASP.NET Web API 【发布时间】:2021-10-03 10:31:11 【问题描述】:我需要在我的 C# Net Core WebApi 的单独线程中执行某些调用。我一直在查看一些文档,但没有找到任何可以满足我需求的文档。
我有这个代码作为我的Program.cs
(用于测试海豚),但我不工作:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Timers;
namespace backend
public class Program
public static void Main(string[] args)
Timer timer = new Timer(1000);
timer.AutoReset = true;
timer.Elapsed += new ElapsedEventHandler(test);
timer.Start();
CreateHostBuilder(args).Build().Run();
public static void test(object sender, ElapsedEventArgs e)
Console.WriteLine("Look mom, I'm on a thread.");
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.UseStartup<Startup>();
);
我对这个话题有点陌生。任何提示或想法?
【问题讨论】:
看看docs.microsoft.com/en-us/aspnet/core/fundamentals/host/… @Anu6is 非常感谢您为我指明正确的方向。我认为这是我需要的答案和我正在寻找的文档。 【参考方案1】:我已经解决了这个documentation。我创建了一个后台服务并从 Startup.cs 添加到服务中。
文档:
Startup.cs
public void ConfigureServices(IServiceCollection services)
/*...*/
services.AddHostedService<TimedBackgroundService>();
/*...*/
程序.cs
namespace backend
public class Program
public static void Main(string[] args)
CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.UseStartup<Startup>();
);
TimedBackgroundService.cs
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace backend
public class TimedBackgroundService:IHostedService, IDisposable
private int executionCount = 0;
private readonly ILogger<TimedBackgroundService> _logger;
private Timer _timer;
public TimedBackgroundService(ILogger<TimedBackgroundService> logger)
_logger = logger;
public Task StartAsync(CancellationToken stoppingToken)
_logger.LogInformation("Timed Hosted Service running.");
_timer = new Timer(DoWork, null, TimeSpan.Zero,
TimeSpan.FromSeconds(5));
return Task.CompletedTask;
private void DoWork(object state)
Console.WriteLine("I'm working on a background Service");
public void Dispose()
_timer?.Dispose();
public Task StopAsync(CancellationToken stoppingToken)
_logger.LogInformation("Timed Hosted Service is stopping.");
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
【讨论】:
你也可以扩展BackgroundService
然后执行while(true) await Task.Delay(...); DoWork();
以上是关于在 ASP.NET Web API 中创建一个线程每 X 秒执行一次特定代码的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Web ASP.NET (.NET Framework) 中创建启动文件?
如何在 asp.net 中创建 RESTful Web 服务?
是否可以在 ASP.NET Web API 中创建中间件?我参考了网上的资料并尝试过,但没有成功
如何在 Asp.NET Core WEB API 中使用 .Net (C#) 在 Payload 中创建具有自定义 JSON 声明的 JWT 令牌