[英]Delete a Question Object from Database after 3 days if it is not answered
我正在使用 .net 核心開發 web 應用程序項目,我想自行關閉(刪除)一個問題 object 從數據庫中發布(MySQL 在我的情況下沒有答案)。 我相信我可以使用 Worker Services,但我不確定如何使用它,以及在后台運行這么多后台服務是否合乎邏輯(每個問題 1 個服務/計時器)。 謝謝你。
只需將它們過濾掉,不要在查詢中將它們返回給 UI。 當您想要手動刪除或有一個每天運行一次的后台作業或隨時刪除它們時刪除
我建議在 sql 中為此創建代理作業,問題表和答案表之間的關系是這樣的
Delete from QuestionsTable
where id not in (select FK_questionID from AnswersTable)
AND CreateDate < DATE_ADD(NOW() , INTERVAL -3 DAY)
並每天執行此查詢
您也可以更新問題表中的活動字段
希望對你有幫助
您只需要一項后台服務即可完成這項工作。
我假設您已經有一個服務接口:
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>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.