为后台进程构建 Blazor 应用程序的指南

Guidance on architecting an Blazor App for Background Processes

我正在寻找如何解决这个问题的方向。这是我的一个个人项目,目的是学习更多关于网络技术的信息,因为我上次接触这些东西是在 Macromedia 还在营业的时候。

我有两个程序。都是.NET CORE 3.1写成C#.

Email 控制台应用程序 运行 每 15 minutes 检查一次 Google Gmail 帐户是否收到任何新电子邮件。如果这样做,来自电子邮件的某些元数据将被解析并存储在 SQL 数据库中。是的,我知道我不必每隔 15 minutes 轮询一次电子邮件,因为 Google 有推送支持。

Blazor 网络应用程序只是一个 HTML table,其中单个 table 单元格根据 SQL 数据库实时更改进行更新时尚。您可以将此 table 视为某种仪表板。

现在我系统上的两个程序 运行。

现在,我的问题是:

如果我想摆脱 Email 控制台应用程序并替换其在 Blazor 网络应用程序中的功能,我将使用哪些库或技术让后台服务自动轮询 Gmail 帐户每 15 minutes。我非常精通 C#,但是当涉及到网络内容时,我仍然是一个菜鸟,所以我只是在寻找可以研究的东西以了解更多信息。不确定 Microservice 是否有意义。

感谢您提出任何建议。最终,我计划在 Microsoft Azure 中托管此 Blazor 网络应用程序供我个人使用。

我们正在为我们的 WebAssembly 应用程序(可能与 Blazor-server 类似)执行此操作,我们实现它的方式是在 .NET Core 中使用 hosted services。参见 these microsoft docs

在您的服务器上,在 Startup.cs 中,您在 public void ConfigureServices(IServiceCollection services)

中初始化了一个托管服务
// Start up a background service / watcher to monitor fatal errors
services.AddHostedService<FatalExceptionMonitor>();

然后我们的 FatalExceptionMonitor class 继承自 BackgroundService,并且有一个方法 ExecuteAsync 会被自动调用:

protected override async Task ExecuteAsync(CancellationToken cancelToken)
{
    // The way background services run every X minutes is putting a Task.Delay inside a while loop
    while (!cancelToken.IsCancellationRequested)
    {

        try
        {
            // Do stuff here
        }
        catch (Exception ex)
        {

        }

        // The way background services run every X minutes is putting a Task.Delay inside a while loop
        // Pause for X minutes
        int.TryParse(_configuration["FatalExceptionMonitor:HowOftenToRunInMinutes"], out int HowOftenToRunInMinutes);
        await Task.Delay(1000 * 60 * HowOftenToRunInMinutes, cancelToken);
    }
}