У меня есть код, который выполняет отчет каждую ночь в полночь. У меня есть еще один отчет, который мне также нужно составлять в начале каждого месяца. Можно ли совместно использовать эту фоновую службу для одновременного запуска обеих? Мой код на данный момент:
namespace API.Services
{
public class ReviewSummaryBackgroundService : BackgroundService
{
protected IWebHostEnvironment _env;
private readonly IServiceScopeFactory _scopeFactory;
public ReviewSummaryBackgroundService(IWebHostEnvironment env, IServiceScopeFactory scopeFactory)
{
_env = env;
_scopeFactory = scopeFactory;
}
private static TimeSpan TimeUntilMidnight()
{
return DateTime.Today.AddDays(1) - DateTime.Now;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var delay = _env.IsProduction() ? TimeSpan.Zero : TimeUntilMidnight();
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(delay, stoppingToken);
try
{
await OnTimerFiredAsync(stoppingToken);
}
catch (Exception ex)
{
// in future log exception
}
delay = TimeUntilMidnight();
}
}
private async Task OnTimerFiredAsync(CancellationToken stoppingToken)
{
// Create a scope using the CreateScope method
using (var scope = _scopeFactory.CreateScope())
{
var reviewSummaryService = scope.ServiceProvider.GetRequiredService();
await reviewSummaryService.ExportDailyExcelReportAsync();
}
}
}
}
Другой отчет использует общий уровень обслуживания, поэтому я бы просто позвонил:
reviewSummaryService.ExportMonthlyExcelReportAsync()
Подробнее здесь: https://stackoverflow.com/questions/791 ... d-services