【问题标题】:hosted service (background service) in asp.net core restart in each Publish azure在每个发布天蓝色的asp.net核心中重新启动托管服务(后台服务)
【发布时间】:2020-12-23 16:16:33
【问题描述】:

我有一个托管服务,每 3 天发送一封电子邮件 我的问题是当我在 azure 中发布服务时重新启动 3 天的计算

  public Task StartAsync(CancellationToken cancellationToken)
        {

            _timer = new Timer(SendReminderEmail, null, TimeSpan.FromDays(3), TimeSpan.FromDays(3));
             

            return Task.CompletedTask;
        }

这个问题有解决办法吗?例如,我在 azure 星期二发布我希望我在星期五有一封电子邮件,但如果我在 azure 星期三发布另一个时间,它将从星期三开始计算:/

谢谢

【问题讨论】:

  • 该类在您的服务中运行。发布服务时,需要重新启动它。在任何情况下,托管服务适用于长达数天的日程安排。此外,当您每周只需要两次时,您正在为 24/7 全天候付费
  • 将日期存储在某种形式的队列/数据库中,然后使用它而不是将其保存在内存中
  • 请使用诸如带定时器的持久函数之类的东西,而不是自己构建它! docs.microsoft.com/en-us/azure/azure-functions/durable/…
  • 如果托管服务不适用于长达数天的计划。我应该用什么?抱歉,我是 asp.net 核心的新手。我只有一封电子邮件,如果他们没有完成他们的题字,必须每 3 天发送给用户

标签: c# asp.net azure asp.net-core asp.net-core-hosted-services


【解决方案1】:

有一些不同的选项可能会更好地满足您的需求。在这三个中,我会选择没有提及的函数。

  1. Webjobs 专门用于运行与主应用程序分开的后台任务。它们可以在计时器上运行,并与您的主应用分开部署。
  2. 这是 Functions 的一个很好的用例,它建立在 Webjobs 之上,并添加了基于消耗的计费选项,您只需为实际使用的资源付费,而不是传统的应用服务帐户,其中即使您的应用处于闲置状态,您也按小时付费。如果您的应用服务已经有多余的容量,您也可以在那里部署它。
  3. 在服务总线或存储队列中使用scheduled delivery。一旦你的进程完成运行,它会在三天后安排一条消息。缺点是这可能有点脆弱 - 如果进程失败,它将不会创建新消息并且循环将被打破。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2016-08-28
    • 2018-04-12
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多