Easy-DotNET Easy-DotNET
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
npm
  • 简介
  • ORM

    • EFCore
    • Dapper
    • FreeSql
    • SqlSugar
  • 任务调度

    • Hangfire
    • Quartz
    • FluentScheduler
      • 安装
      • 示例
      • 注册表
      • 任务
      • 调度器
      • 时间间隔
      • 任务优先级
      • 任务取消
      • 多个注册表
      • 自定义任务存储
      • 异常处理
      • 总结
    • Coravel
    • Quartzmin
  • 日志

    • Serilog
    • NLog
    • Log4Net
    • Stackdriver
    • ExceptionLess
  • 身份认证与授权

    • IdentityServer4
    • Identity
    • JWTBearer
    • Auth0
    • OpenIddict
  • Swagger文档

    • Swagger
    • Swashbuckle
    • NSwag
    • ReDoc
  • 对象映射

    • AutoMapper
    • EmitMapper
    • AgileMapper
    • Mapster
  • 消息传递

    • MediatR
    • MassTransit
    • Rebus
    • NServiceBus
  • 熔断重试限流

    • Polly
    • Resilience4j
    • AkkaNET
  • 缓存

    • CsRedis
    • FreeRedis
    • EasyCaching
    • StackExchangeRedis
    • CacheCow
    • NCache
    • Memory
  • 注册发现

    • Consul
    • Nacos
    • Apollo
  • 网关

    • Ocelot
    • Kong
    • Traefik
    • Zuul
  • GraphQL

    • GraphQLPlatform
    • GraphQLdotnet
  • 更多

    • NodaTime
    • FluentAssertions
    • Humanizer
    • 爬虫-AngleSharp
    • 邮件-MailKit
  • NET微服务
  • 任务调度
一个大西瓜
2023-04-18
目录

FluentScheduler

开源地址

Github:https://github.com/fluentscheduler/FluentScheduler (opens new window)

FluentScheduler是一个轻量级、易于使用的开源任务调度库。它提供了一个简单、流畅的API来配置和管理定时任务,可以在.NET应用程序中使用。

在本文中,我们将深入探讨FluentScheduler的功能和用法,并提供详细的示例代码和说明。

# 安装

FluentScheduler可以通过NuGet包管理器安装。在Visual Studio中,右键单击项目,选择“管理NuGet软件包”,然后在搜索框中输入“FluentScheduler”。选择安装并等待安装完成即可。

# 示例

让我们从一个简单的示例开始,介绍如何使用FluentScheduler来调度一个任务。


using FluentScheduler;

public class MyRegistry : Registry
{
    public MyRegistry()
    {
        Schedule<MyTask>().ToRunNow().AndEvery(5).Seconds();
    }
}

public class MyTask : IJob
{
    public void Execute()
    {
        Console.WriteLine("Hello, world!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var registry = new MyRegistry();
        var scheduler = new Scheduler(registry);
        scheduler.Start();
        Console.ReadKey();
    }
}

在这个例子中,我们定义了一个任务MyTask,并使用MyRegistry类将其调度。我们指定任务应该立即运行,并且每5秒钟运行一次。最后,我们启动调度器,并等待按下任意键以退出。

现在让我们来详细解释这个例子。

# 注册表

FluentScheduler使用注册表来配置和管理任务。注册表是一个类,它派生自Registry并定义了要执行的任务。在上面的例子中,我们定义了一个MyRegistry类,它包含一个名为MyTask的任务。


public class MyRegistry : Registry
{
    public MyRegistry()
    {
        Schedule<MyTask>().ToRunNow().AndEvery(5).Seconds();
    }
}

Schedule<T>()方法用于将任务添加到注册表中。在这个例子中,我们将MyTask任务添加到注册表中。ToRunNow()方法指定任务应该立即运行,而AndEvery(5).Seconds()方法指定任务应该每5秒运行一次。

# 任务

任务是一个类,它实现了IJob接口。在上面的例子中,我们定义了一个MyTask类,它实现了IJob接口。


public class MyTask : IJob
{
    public void Execute()
    {
        Console.WriteLine("Hello, world!");
    }
}

Execute()方法是任务的主要代码逻辑。在这个例子中,我们将Hello, world!打印到控制台。

# 调度器

调度器是用来启动、停止和管理任务的类。在上面的例子中,我们创建了一个调度器实例,并将MyRegistry注册表传递给它。


var registry = new MyRegistry();
var scheduler = new Scheduler(registry);

调度器有几个方法可以用来管理任务,包括启动、停止、等待和重启。在上面的例子中,我们使用Start()方法启动调度器。

# 时间间隔

FluentScheduler提供了一组方法,可以在不同的时间间隔上调度任务。以下是一些常用的时间间隔方法:

  • ToRunOnceAt(date):在指定的日期和时间运行一次任务。
  • ToRunNow():立即运行任务。
  • ToRunEvery(interval):在指定的时间间隔上运行任务。
  • ToRunEvery(TimeSpan):在指定的时间间隔上运行任务。
  • ToRunEveryX(interval).Days():每隔X天运行任务。
  • ToRunEveryX(interval).Weeks():每隔X周运行任务。
  • ToRunEveryX(interval).Months():每隔X个月运行任务。
  • ToRunEveryX(interval).Years():每隔X年运行任务。

时间间隔可以是任何TimeSpan值,例如TimeSpan.FromSeconds(10)将在每10秒钟运行一次任务。

# 任务优先级

FluentScheduler允许您指定任务的优先级,以控制任务之间的执行顺序。较高的优先级任务将在较低优先级任务之前执行。


Schedule<MyTask>().ToRunEvery(5).Seconds().WithPriority(1);
Schedule<MyOtherTask>().ToRunEvery(10).Seconds().WithPriority(2);

在上面的例子中,MyOtherTask任务的优先级高于MyTask任务。因此,MyOtherTask将在MyTask之前运行。

# 任务取消

如果您想在程序运行时取消任务,FluentScheduler允许您使用RemoveScheduledTask方法来取消已计划的任务。


var task = TaskManager.GetSchedule<MyTask>();
TaskManager.RemoveScheduledTask(task);

在上面的例子中,我们获取MyTask的计划任务,并使用RemoveScheduledTask方法将其取消。

# 多个注册表

如果您的应用程序需要执行多个任务,FluentScheduler允许您使用多个注册表来管理这些任务。您可以创建多个注册表,每个注册表都包含一组相关的任务。


public class MyRegistry1 : Registry
{
    public MyRegistry1()
    {
        Schedule<MyTask1>().ToRunEvery(5).Seconds();
    }
}

public class MyRegistry2 : Registry
{
    public MyRegistry2()
    {
        Schedule<MyTask2>().ToRunEvery(10).Seconds();
    }
}

var registry1 = new MyRegistry1();
var registry2 = new MyRegistry2();

var scheduler = new Scheduler();
scheduler.AddRegistry(registry1);
scheduler.AddRegistry(registry2);
scheduler.Start();

在上面的例子中,我们定义了两个注册表,MyRegistry1和MyRegistry2,每个注册表都包含一个任务。我们将这两个注册表添加到调度器中,并启动调度器。

# 自定义任务存储

FluentScheduler默认情况下,FluentScheduler使用内存作为任务存储。这意味着所有已计划的任务都将存储在内存中,并在应用程序关闭时丢失。如果您需要长期存储任务,或者需要使用自定义任务存储,FluentScheduler允许您实现自己的任务存储。

要实现自己的任务存储,您需要创建一个类,它实现ITaskFactory和ITaskManager接口。ITaskFactory接口用于创建任务实例,ITaskManager接口用于管理任务。

以下是一个自定义任务存储的示例:


public class CustomTaskStorage : ITaskFactory, ITaskManager
{
    private List<Task> _tasks = new List<Task>();

    public void AddTask(Task task)
    {
        _tasks.Add(task);
    }

    public void ExecuteAll()
    {
        foreach (var task in _tasks)
        {
            task.Execute();
        }
    }

    public bool RemoveTask(Task task)
    {
        return _tasks.Remove(task);
    }

    public Task GetTask(string name)
    {
        return _tasks.FirstOrDefault(t => t.Name == name);
    }

    public Task[] GetTasks()
    {
        return _tasks.ToArray();
    }

    public void Initialize()
    {
    }

    public Task New(string name, Action action)
    {
        var task = new Task(name, action);
        AddTask(task);
        return task;
    }

    public Task New(string name, Action action, Func<DateTime, TimeSpan> delayProvider)
    {
        var task = new Task(name, action, delayProvider);
        AddTask(task);
        return task;
    }
}

在上面的例子中,我们创建了一个名为CustomTaskStorage的类,它实现了ITaskFactory和ITaskManager接口。该类使用一个List<Task>来存储所有的任务。

AddTask方法用于将任务添加到任务列表中,RemoveTask方法用于从任务列表中删除任务,GetTask方法用于获取指定名称的任务,GetTasks方法用于获取所有任务的列表。

New方法用于创建新的任务实例,并将其添加到任务列表中。ExecuteAll方法用于执行所有任务。

要使用自定义任务存储,您需要将其传递给调度器构造函数。


var storage = new CustomTaskStorage();
var scheduler = new Scheduler(storage);

在上面的例子中,我们将CustomTaskStorage实例传递给调度器构造函数,以便使用自定义任务存储。

# 异常处理

当任务执行期间发生异常时,FluentScheduler提供了一个机制来处理异常。您可以使用OnException方法来指定要执行的异常处理程序。


Schedule<MyTask>().ToRunEvery(5).Seconds().OnException((ex) => Console.WriteLine(ex.Message));

在上面的例子中,我们指定了一个异常处理程序,当任务MyTask抛出异常时,将打印异常消息。

# 总结

在本文中,我们介绍了FluentScheduler的功能和用法。我们从一个简单的示例开始,详细介绍了注册表、任务、调度器、时间间隔、任务优先级、任务取消、多个注册表、自定义任务存储和异常处理。我们还提供了示例代码和说明,帮助您更好地理解如何使用FluentScheduler。

FluentScheduler是一个易于使用、灵活和可扩展的任务调度库。它提供了一个简单、流畅的API,使您可以轻松地配置和管理定时任务。无论您需要在.NET应用程序中执行什么类型的任务,FluentScheduler都可以满足您的需求。

如果您正在寻找一个可靠的任务调度库,并希望拥有易于使用和灵活的API,那么FluentScheduler是您的最佳选择。不要犹豫,开始使用FluentScheduler,让它帮助您自动化您的任务,并提高您的工作效率。

上次更新: 2023/04/26, 22:10:06
Quartz
Coravel

← Quartz Coravel→

Theme by Vdoing | Copyright © 2019-2024 一个大西瓜 | MIT License | 苏ICP备2023013501号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式