如果 3 天后未回答,则从数据库中删除问题对象
Delete a Question Object from Database after 3 days if it is not answered
我正在使用 .net 核心开发一个 Web 应用程序项目,我想从数据库中自行关闭(删除)一个问题对象(MySQL 在我的例子中)如果它已发布3天没有回复。
我相信我可以使用 Worker Services,但我不确定如何使用它以及在后台拥有这么多后台服务 运行 是否合乎逻辑(每个问题 1 service/timer)。
谢谢。
只需过滤掉它们,不要 return 在您对 UI 的查询中使用它们。
当您需要时手动删除,或者有一个后台作业每天运行一次或随时删除它们
我建议在 sql 中创建代理工作,为此问题 table 和答案 table 之间的关系,你的查询是这样的
Delete from QuestionsTable
where id not in (select FK_questionID from AnswersTable)
AND CreateDate < DATE_ADD(NOW() , INTERVAL -3 DAY)
并且每天执行这个查询
also you can update active field in Question Table
希望对你有所帮助
您只需要一项后台服务即可完成这项工作。
我假设你已经有一个服务接口:
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>();
我正在使用 .net 核心开发一个 Web 应用程序项目,我想从数据库中自行关闭(删除)一个问题对象(MySQL 在我的例子中)如果它已发布3天没有回复。 我相信我可以使用 Worker Services,但我不确定如何使用它以及在后台拥有这么多后台服务 运行 是否合乎逻辑(每个问题 1 service/timer)。 谢谢。
只需过滤掉它们,不要 return 在您对 UI 的查询中使用它们。 当您需要时手动删除,或者有一个后台作业每天运行一次或随时删除它们
我建议在 sql 中创建代理工作,为此问题 table 和答案 table 之间的关系,你的查询是这样的
Delete from QuestionsTable
where id not in (select FK_questionID from AnswersTable)
AND CreateDate < DATE_ADD(NOW() , INTERVAL -3 DAY)
并且每天执行这个查询
also you can update active field in Question Table
希望对你有所帮助
您只需要一项后台服务即可完成这项工作。
我假设你已经有一个服务接口:
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>();