构建 .NET Core 3 计划作业辅助服务 安装 .NET Core 3 预览版 Coravel 的任务计划辅助服务模板 配置 Coravel 添加可调用对象 调度可调用对象 真实世界的可调用对象 配置为 Windows 服务 结论 保持联系 浏览您的软件开发职业通讯

2025-06-09

构建 .NET Core 3 计划任务执行器服务

安装 .NET Core 3 预览版

Coravel 的任务调度

工作者服务模板

配置 Coravel

添加可调用

安排你的调用

现实世界可调用

配置为 Windows 服务

结论

保持联系

导航您的软件开发职业通讯

.NET Core CLI 附带大量预建项目模板!.NET Core 3中将包含用于构建工作服务的新模板之一。

将 .NET Core 工作服务与Coravel结合使用,可以帮助您快速构建轻量级后台作业调度应用程序。让我们来看看如何在几分钟内完成!

注意:工作服务是轻量级控制台应用程序,可执行某些类型的后台工作,例如从队列中读取和处理工作(例如发送电子邮件)、从系统中执行一些计划的后台作业等。这些可能作为守护进程、Windows 服务等运行。

安装 .NET Core 3 预览版

在撰写本文时,.NET Core 3 处于预览阶段。首先,您必须安装 SDK。您可以使用 Visual Studio Code 完成本文中的所有其他操作👍。

Coravel 的任务调度

Coravel是一个 .NET Core 库,它几乎无需任何配置,即可提供开箱即用的高级应用程序功能。Laravel的易用性启发了我,我希望能将这种简单易用的 Web 应用程序构建方法引入 .NET Core。

其中一个功能是 100% 通过代码配置的任务调度程序。

通过利用 Coravel 的易用性和 .NET Core 的工作服务项目模板的简单性,我将向您展示如何轻松快速地构建一个小型后端控制台应用程序来运行您计划的后台作业!

工作者服务模板

首先,创建一个空文件夹来存放您的新项目。

然后运行:

dotnet new worker

您的 Worker 项目已准备就绪!🤜🤛

查看Program.cs你会看到以下内容:

public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices(services =>
        {
            services.AddHostedService<Worker>();
        });
Enter fullscreen mode Exit fullscreen mode

配置 Coravel

让我们通过运行来添加 Coravel dotnet add package coravel

接下来,在Program.cs中,我们将修改为我们生成的通用代码并配置 Coravel:

public static void Main(string[] args)
{
    IHost host = CreateHostBuilder(args).Build();
    host.Services.UseScheduler(scheduler => {
        // We'll fill this in later ;)
    });
    host.Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices(services =>
        {
            services.AddScheduler();
        });
};
Enter fullscreen mode Exit fullscreen mode

由于 Coravel 是一套原生的 .NET Core 工具,因此它可以轻松运行™ !

添加可调用

Coravel 的基本概念之一是Invocables

每个可调用函数都代表系统内的一项独立作业,Coravel 利用这些作业使您的代码更易于编写、组合和维护。

接下来,创建一个实现的类Coravel.Invocable.IInvocable

public class MyFirstInvocable : IInvocable
{
    public Task Invoke()
    {
        Console.WriteLine("This is my first invocable!");
        return Task.CompletedTask;
    }
}
Enter fullscreen mode Exit fullscreen mode

由于我们要模拟一些异步工作,我们只需将消息记录到控制台,然后返回Task.CompletedTask给调用者。

安排你的调用

这就是 Coravel 真正闪耀的地方😉。

让我们将新的 invocable 调度为每 5 秒运行一次。在Program.cs的main 方法中,我们将添加:

host.Services.UseScheduler(scheduler => {
    // Yes, it's this easy!
    scheduler
        .Schedule<MyFirstInvocable>()
        .EveryFiveSeconds();
});
Enter fullscreen mode Exit fullscreen mode

不要忘记向 .NET Core 的服务容器注册您的可调用对象:

.ConfigureServices(services =>
{
    services.AddScheduler();
    // Add this 👇
    services.AddTransient<MyFirstInvocable>();
});
Enter fullscreen mode Exit fullscreen mode

在您的终端中运行dotnet run

您应该每五秒钟在终端上看到一次输出!

现实世界可调用

当然,写入控制台很棒 - 但毕竟您将要进行 API 调用、数据库查询等。

让我们修改我们的可调用函数以便我们可以做一些更有趣的事情:

public class SendDailyReportEmailJob : IInvocable
{
    private IMailer _mailer;
    private IUserRepository _repo;

    public SendDailyReportEmailJob(IMailer mailer, IUserRepository repo)
    {
        this._mailer = mailer;
        this._repo = repo;
    }

    public async Task Invoke()
    {
        var users = await this._repo.GetUsersAsync();

        foreach(var user in users)
        {
            var mailable = new DailyReportMailable(user);
            await this._mailer.SendAsync(mailable);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

由于此类将挂接到 .NET Core 的服务容器中,因此所有构造函数依赖项都将通过依赖注入来注入。

如果您想构建一个轻量级的后台应用程序来处理所有用户的每日报告并通过电子邮件发送,那么这可能是一个不错的选择。

配置为 Windows 服务

虽然超出了本文的范围,但您可以了解一下 .NET Core 3 如何将您的工作程序配置为 Windows 服务

而且,显然,即将推出对 systemd 的支持!

结论

你们对 .NET Core 的工作服务有何看法?

我发现它们非常容易上手。再加上 Coravel 的易用性设计,我觉得这两个工具简直是绝配,可以用来做一些很酷的事情!

Coravel 的所有功能都可以在这些工作服务中使用 - 例如排队任务事件广播邮件发送等。

我很想尝试将Coravel Pro与工作服务集成。不过,一步一步来吧🤣。

保持联系

不要忘记通过以下方式与我联系:

您也可以通过我的网站www.jamesmichaelhickey.com找到我。

导航您的软件开发职业通讯

一封电子邮件简报,助您提升软件开发职业水平!您是否想过:

✔ 软件开发人员通常经历哪些阶段?
✔ 我如何知道自己处于哪个阶段?如何进入下一个阶段?
✔ 什么是技术领导者?如何成为技术领导者?
✔ 有人愿意陪伴我并解答我的疑问吗?

听起来很有趣?加入社区吧!

鏂囩珷鏉ユ簮锛�https://dev.to/jamesmh/building-a-net-core-scheduled-job-worker-service-376h
PREV
超过 30 条开发技巧合集
NEXT
项目 41/100 - 使用 JSX 编写响应式 CSS