簡體   English   中英

如果問題 Object 未回答,則在 3 天后從數據庫中刪除該問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM