编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

.Net 任务调用库(.net调用api)

wxchong 2024-10-11 18:40:09 开源技术 12 ℃ 0 评论

在 .NET 平台上,有许多任务调度库可以用来执行定时任务、后台任务和异步任务等。Quartz.NET和Hangfire是常用的两个任务调度类库:

  1. Quartz.NET:Quartz.NET 是一个功能强大的任务调度库,可以用于创建和管理各种类型的定时任务。它支持多种触发器类型,如简单的重复间隔、Cron 表达式等,并提供了灵活的数据存储选项。
  2. Hangfire:Hangfire 是一个轻量级的任务调度库,它可用于执行后台任务和延迟任务。它使用简单的队列-后台任务架构,你只需将方法添加到后台任务队列中,Hangfire 会自动执行这些方法。

Quartz使用方法

1.安装

在 Visual Studio 中,使用 NuGet 包管理器安装 Quartz 包。也可以在 NuGet 包管理器控制台中运行以下命令来安装 Quartz:

Install-Package Quartz

2.创建作业类:在你的代码中创建实现 IJob 接口的作业类。这个类将包含要执行的任务逻辑。例如,假设你有一个发送邮件的作业类:

using Quartz;

public class EmailJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        // 发送邮件逻辑...
        return Task.CompletedTask;
    }
}

3.配置 Quartz:在你的代码中配置 Quartz 的调度器。这涉及到创建调度器实例、定义触发器和作业等。以下是一个示例:

using Quartz;
using Quartz.Impl;

public class QuartzManager
{
    public static async Task Start()
    {
        // 创建调度器工厂
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();

        // 获取调度器实例
        IScheduler scheduler = await schedulerFactory.GetScheduler();

        // 开启调度器
        await scheduler.Start();

        // 创建作业实例
        IJobDetail job = JobBuilder.Create<EmailJob>()
            .WithIdentity("emailJob", "group1")
            .Build();

        // 创建触发器实例,每隔一分钟触发一次
        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("emailTrigger", "group1")
            .StartNow()
            .WithSimpleSchedule(x => x
                .WithIntervalInSeconds(60)
                .RepeatForever())
            .Build();

        // 将作业和触发器关联起来
        await scheduler.ScheduleJob(job, trigger);
    }

    public static async Task Stop()
    {
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        IScheduler scheduler = await schedulerFactory.GetScheduler();
        await scheduler.Shutdown();
    }
}

在上述代码中,我们创建了一个调度器实例,并定义了一个作业 (EmailJob) 和一个触发器 (emailTrigger)。触发器将在每分钟执行一次作业。

4.启动和停止 Quartz:在你的应用程序中调用 QuartzManager.Start() 来启动 Quartz 调度器,调用 QuartzManager.Stop() 来停止调度器。

class Program
{
    static async Task Main(string[] args)
    {
        await QuartzManager.Start();

        // 程序运行...

        await QuartzManager.Stop();
    }
}

Hangfire使用方法

1.安装 Hangfire 包:在 Visual Studio 中,使用 NuGet 包管理器安装 Hangfire 包。你可以在 NuGet 包管理器控制台中运行以下命令来安装 Hangfire:

Install-Package Hangfire

2.配置 Hangfire:在 Global.asax 文件中添加以下代码,以初始化 Hangfire:

using Hangfire;
using Hangfire.SqlServer;

protected void Application_Start()
{
    // 其他应用程序启动代码...

    // 配置 Hangfire 使用 SQL Server 作为存储后台任务信息的数据库
    GlobalConfiguration.Configuration.UseSqlServerStorage("connectionString");

    // 启动 Hangfire 服务
    Hangfire.GlobalConfiguration.Configuration.UseActivator(new HangfireActivator());
    Hangfire.GlobalConfiguration.Configuration.UseLogProvider(new HangfireLogProvider());
    HangfireBootstrapper.Instance.Start();
}

在上述代码中,你需要将 connectionString 替换为你的 SQL Server 连接字符串。

3.创建后台任务方法:在你的代码中编写后台任务方法。例如,假设你有一个发送邮件的后台任务方法:

public class EmailService
{
    public void SendEmail(string recipient, string subject, string body)
    {
        // 发送邮件逻辑...
    }
}

4.调度后台任务:在你的代码中,使用 Hangfire 提供的 API 来调度后台任务。例如,要调度发送邮件的后台任务,可以使用以下代码:

var emailService = new EmailService();
BackgroundJob.Enqueue(() => emailService.SendEmail("recipient@example.com", "Hello", "This is the email body."));

在上述代码中,BackgroundJob.Enqueue 方法会将 emailService.SendEmail 方法添加到后台任务队列中,当队列中的任务准备就绪时,Hangfire 将自动执行它。

5.监控后台任务:Hangfire 提供了一个用户界面,可以用于监控和管理后台任务。你可以通过访问 /hangfire 路径来打开该界面。在该界面上,你可以查看当前的后台任务列表、执行历史记录等。

Quartz 和 Hangfire 都是在 .NET 平台上用于任务调度的库,它们有一些相似之处,但也有一些区别。下面是 Quartz 和 Hangfire 的对比:

1.架构和设计:

Quartz:Quartz 使用经典的调度器-作业-触发器的架构。你需要创建作业类来定义要执行的任务逻辑,并通过触发器来指定作业的执行时间。

Hangfire:Hangfire 则采用了更简单和直观的队列-后台任务的架构。你只需将方法添加到后台任务队列中,Hangfire 会自动执行这些方法。

2.定时任务:

Quartz:Quartz 提供了丰富的定时任务功能,支持 Cron 表达式、简单的重复间隔等多种定时触发方式。

Hangfire:Hangfire 通过使用延迟任务来实现定时任务,你可以指定一个时间间隔,在指定的时间后执行任务。

3.可视化界面:

Quartz:Quartz 本身不提供可视化界面,但你可以使用其他开源的项目,如 QuartzDesk 来监控和管理 Quartz 的任务。

Hangfire:Hangfire 提供了一个内置的可视化界面,你可以通过浏览器访问来查看和管理后台任务。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表