我的 Web 应用程序必须根据我的 .NET 5 MVC Web 应用程序上的一些用户生成数据每 1、2、7 天发送一些电子邮件。该应用程序非常复杂,因为它是 3 个门户网站一起运行并相互交互。
触发器很简单,例如:如果用户在 1 天内未完成此发票,则发送提醒邮件。如果用户没有收到反馈(并将其插入到我们的网络应用程序表单中并保存),则每 2 天发送一次邮件提醒。
等等....
通常我使用 Windows 服务来执行此操作,因为您可以轻松地在 C# 中建立一个控制台程序,安排它并忘记它。
这一次,我想尝试用我曾经在项目中看到但从未使用过的东西来做这件事:IHostedService(或 IHost)或 .NET 5 中的 BackgroundService。
既是为了学习新东西,也是为了让我可以通过依赖注入重用大部分数据库代码
我记录了自己一点,这就是我发现的:
Asp.Net - 使用 IHostedService 的计划任务
.NET Web 服务和 BackgroundWorker 线程
如何在 ASP.NET Core 2.1 中的计时器上运行 BackgroundService
关于依赖注入:
.net 核心依赖注入到托管服务 所以它有一些关于整个 Singleton 的事情要解决。
现在,这似乎有点不可靠,或者乍一看似乎是一个优雅的解决方案,但稍后会因神秘的行为和错误而导致大量的头发拉扯,并且存在很多问题。
- 这些服务的用例是什么?它们看起来更像是框架的一个花哨的插件,很少使用,因为它们明显的局限性阻碍了它们。
- 我应该尝试使用它们还是使用 Windows 服务(然后将我编写的所有数据库代码都带入其中)?