C# C ASP.NET核心-在部署的web app/API中定期/自动运行代码

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中 谢谢你,保持安全 在架构上,我建议您将这些繁重的计算分

我肯定有一个合适的术语来形容我正在尝试做的事情,但我不知道。我想定期在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的文档吗?这可能是一个很好的起点: