Вам понадобится только одна фоновая служба для этого задания.
Предполагаю, что у вас уже есть интерфейс службы:
public interface IQuestionService {
Task<IEnumerable<Question>> GetQuestionsToClose();
Task CloseQuestions(IEnumerable<Question> questions);
}
Затем вам нужно реализовать фоновую службу:
public CloseQuestionsBackgroundService : BackgroundService
{
private readonly IQuestionService questionService;
public CloseQuestionsBackgroundService(IQuestionService questionService)
{
this.questionService = questionService;
}
protected override async Task ExecuteAsync(CancellationToken stopToken)
{
while (!stopToken.IsCancellationRequested)
{
var questionsToClose = questionService.GetQuestionsToClose().ConfigureAwait(false);
if (questionsToClose.Any())
{
await questionService.CloseQuestions(questionsToClose).ConfigureAwait(false);
}
await Task.Delay(Timespan.FromSeconds(10)).ConfigureAwait(false); // choose how much time between iterations
}
}
}
Теперь вам просто нужно зарегистрировать фоновую службу в методе ConfigureService вашего Startup.cs
services.AddHostedService<CloseQuestionsBackgroundService>();