如果问题对象未得到答复,则在3天后从数据库中删除该问题对象



我正在使用.net core开发一个web应用程序项目,如果问题对象已经发布了3天没有答案,我想从数据库(在我的例子中是MySQL(中自行关闭(删除(它。我相信我可以使用Worker Services,但我不确定如何使用它,也不确定在后台运行这么多后台服务是否合乎逻辑(每个问题一个服务/计时器(。非常感谢。

只需过滤掉它们,不要在对UI的查询中返回它们。当你想手动删除时,或者有一个每天运行一次的后台作业,或者随时删除

此作业只需要一个后台服务。

我假设你已经有了一个服务接口:

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
}
}
}

现在您只需要在Startup.cs 的ConfigureService方法中注册后台服务

services.AddHostedService<CloseQuestionsBackgroundService>();

我建议在sql中为此创建代理作业,并在Questions表和answer表之间建立关系,您的查询如下

Delete from QuestionsTable 
where id not in (select FK_questionID from AnswersTable) 
AND CreateDate < DATE_ADD(NOW() , INTERVAL -3 DAY)

并每天执行此查询

您还可以更新问题表中的活动字段

我希望它能帮助你

相关内容

最新更新