C# 使用ASP.NET核心MVC项目进行服务器计算

C# 使用ASP.NET核心MVC项目进行服务器计算,c#,entity-framework-core,asp.net-core-mvc,C#,Entity Framework Core,Asp.net Core Mvc,我正在用EF编写一些小型asp.net核心应用程序,我遇到了一个问题。我希望服务器做一些工作,然后每20秒更新一次数据库。我有一个类,它的构造函数是这样的: public UpdateStocks(ILogger<UpdateStocks> logger, IRepository<Stock> stockRepository, IRepository<Product> productRepository, IReposit

我正在用EF编写一些小型asp.net核心应用程序,我遇到了一个问题。我希望服务器做一些工作,然后每20秒更新一次数据库。我有一个类,它的构造函数是这样的:

public UpdateStocks(ILogger<UpdateStocks> logger, IRepository<Stock> stockRepository,
                   IRepository<Product> productRepository, IRepository<DatedPrice> priceRepository)
       {
           this.stockRepository = stockRepository;
           this.productRepository = productRepository;
           this.priceRepository = priceRepository;           
           timer1 = new Timer();
           timer1.Elapsed += new ElapsedEventHandler(timer1_Tick);
           timer1.Interval = 20000; // in miliseconds
           timer1.Start();
       }
公共更新存储库(ILogger记录器、IRepository存储库、,
IRepository productRepository,IRepository priceRepository)
{
this.stockRepository=stockRepository;
this.productRepository=productRepository;
this.priceRepository=priceRepository;
timer1=新定时器();
timer1.appead+=新的ElapsedEventHandler(timer1_Tick);
timer1.Interval=20000;//以毫秒为单位
timer1.Start();
}
就我的理解而言,这根本不涉及MVC,我应该为此任务编写分离逻辑。但我已经在服务中使用了DbContext,还有logger和其他类似于存储库类的东西

services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connection));
services.AddScoped<IRepository<Product>, SQLProductRepository>();
services.AddScoped<IRepository<Stock>, SQLStockRepository>();
services.AddScoped<IRepository<DatedPrice>, SQLDatedPriceRepository>();
services.AddDbContext(options=>options.UseSqlServer(connection));
services.addScope();
services.addScope();
services.addScope();

对于这个逻辑,我应该使用到数据库、记录器和repo实例的不同连接,还是可以从服务导入它们?我应该在哪里创建
UpdateStocks
类的实例?Program.cs?正确的方法是什么?很抱歉,如果问题很愚蠢或者答案很明显,我是新手。

您不能在web请求上下文中执行重复任务。您需要创建一个单独的windows服务,按照计划执行此任务,或者您可以使用类似Hangfire的功能,将长时间运行的作业功能添加到现有asp.net应用程序中。您不能从web请求上下文执行重复性任务。您需要创建一个单独的windows服务来按计划执行此任务,或者您可以使用类似Hangfire的功能,将长时间运行的作业功能添加到现有asp.net应用程序中