C# C ASP.NET核心-在部署的web app/API中定期/自动运行代码
我肯定有一个合适的术语来形容我正在尝试做的事情,但我不知道。我想定期在API控制器中运行程序或方法。例如,在连接到我的应用程序的数据库中,我有从客户端请求填充的表a和使用表a填充自身的表B。在客户机请求期间不应填充表B,因为这将花费太长的时间,相反,对于引用表a并定期填充表B的程序来说,这样做比较方便 这种做法叫什么?它是如何在C/ASP.NET核心中实现的,有哪些最佳实践?仅供参考,我的ASP.NET核心REST API部署在Azure中C# C ASP.NET核心-在部署的web app/API中定期/自动运行代码,c#,asp.net-core,automation,C#,Asp.net Core,Automation,我肯定有一个合适的术语来形容我正在尝试做的事情,但我不知道。我想定期在API控制器中运行程序或方法。例如,在连接到我的应用程序的数据库中,我有从客户端请求填充的表a和使用表a填充自身的表B。在客户机请求期间不应填充表B,因为这将花费太长的时间,相反,对于引用表a并定期填充表B的程序来说,这样做比较方便 这种做法叫什么?它是如何在C/ASP.NET核心中实现的,有哪些最佳实践?仅供参考,我的ASP.NET核心REST API部署在Azure中 谢谢你,保持安全 在架构上,我建议您将这些繁重的计算分
谢谢你,保持安全 在架构上,我建议您将这些繁重的计算分离到其他微服务中,或者在大多数云产品中利用当前的无服务器功能 如果这不可行,asp.net core有一种称为后台服务的东西,您可以利用它来触发某些任务。 文件如下:
. 它在2.1版中也可以使用。在架构上,我建议您将这些繁重的计算分离到其他微服务中,或者在大多数云产品中利用当前的无服务器功能 如果这不可行,asp.net core有一种称为后台服务的东西,您可以利用它来触发某些任务。 文件如下:
. 它在2.1中也可用。在ASP.NET Core中,您可以通过创建托管服务来运行后台任务。您可以阅读完整的文档 如果您希望定期运行任务,则定时后台任务可能是合适的。直接从文档中获取的示例如下:
public class TimedHostedService : IHostedService, IDisposable
{
private int executionCount = 0;
private readonly ILogger<TimedHostedService> _logger;
private Timer _timer;
public TimedHostedService(ILogger<TimedHostedService> 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)
{
var count = Interlocked.Increment(ref executionCount);
_logger.LogInformation(
"Timed Hosted Service is working. Count: {Count}", count);
}
public Task StopAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Timed Hosted Service is stopping.");
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}
在ASP.NET Core中,您可以通过创建托管服务来运行后台任务。您可以阅读完整的文档 如果您希望定期运行任务,则定时后台任务可能是合适的。直接从文档中获取的示例如下:
public class TimedHostedService : IHostedService, IDisposable
{
private int executionCount = 0;
private readonly ILogger<TimedHostedService> _logger;
private Timer _timer;
public TimedHostedService(ILogger<TimedHostedService> 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)
{
var count = Interlocked.Increment(ref executionCount);
_logger.LogInformation(
"Timed Hosted Service is working. Count: {Count}", count);
}
public Task StopAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("Timed Hosted Service is stopping.");
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}
你看过微软关于HostedService的文档吗?这可能是一个很好的起点:你看过微软关于HostedService的文档吗?这可能是一个很好的起点: