Fork me on GitHub

分享几个.NET 下的计划任务组件

Quartz

http://www.quartz-scheduler.net/(现项目在使用,可以看我之前的文章)

Hangfire

http://hangfire.io/

Install-Package Hangfire
使用OWIN初始化
复制代码
  public partial class Startup
    {
        private readonly string HangFireDB = @””;
        public void Configuration(IAppBuilder app)
        {
            app.UseHangfire(config =>
            {
                config.UseSqlServerStorage(HangFireDB);
                config.UseServer();

            });
            RecurringJob.AddOrUpdate(() => TestJob(), Cron.Daily);
            ConfigureAuth(app);
        }

        public void TestJob()
        {

        }
    }
复制代码

访问:http://your-site/hangfire ,可以方便 查看,管理,触发JOB等

image

FluentScheduler

https://github.com/jgeurts/FluentScheduler
Nuget :Install-Package FluentScheduler
使用很简单,一直直接使用TaskManager类管理即可

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FluentScheduler;

namespace TestFluentScheduler
{
  class Program
  {
    static void Main(string[] args)
    {
      TaskManager.AddTask(() =>
      {
        //Do something...
        Console.WriteLine("Timer task,current time:{0}", DateTime.Now);
      }, t =>
      {
        //每5秒钟执行一次
        t.ToRunNow().AndEvery(5).Seconds();
        ////带有任务名称的任务定时器
        //t.WithName("TaskName").ToRunOnceAt(DateTime.Now.AddSeconds(5));
      });
      Console.ReadKey();
    }
  }
}
复制代码

使用继承FluentScheduler的Registry类(需要初始化)

复制代码
using FluentScheduler;

public class MyRegistry : Registry
{
    public MyRegistry()
    {
        // Schedule an ITask to run at an interval
        Schedule<MyTask>().ToRunNow().AndEvery(2).Seconds();

        // Schedule an ITask to run once, delayed by a specific time interval. 
        Schedule<MyTask>().ToRunOnceIn(5).Seconds();

        // Schedule a simple task to run at a specific time
        Schedule(() => Console.WriteLine("Timed Task - Will run every day at 9:15pm: " + DateTime.Now)).ToRunEvery(1).Days().At(21, 15);

        // Schedule a more complex action to run immediately and on an monthly interval
        Schedule(() =>
        {
            Console.WriteLine("Complex Action Task Starts: " + DateTime.Now);
            Thread.Sleep(1000);
            Console.WriteLine("Complex Action Task Ends: " + DateTime.Now);
        }).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);

        //Schedule multiple tasks to be run in a single schedule
        Schedule<MyTask>().AndThen<MyOtherTask>().ToRunNow().AndEvery(5).Minutes();
    }
}
复制代码

在web程序的Global.asax文件中初始化

protected void Application_Start()
{
    TaskManager.Initialize(new MyRegistry()); 
}

WebBackgrounder

http://www.nuget.org/packages/WebBackgrounder/
http://diaosbook.com/Post/2014/7/18/how-to-run-schedule-jobs-in-aspnet

Taskschedulerengine

http://taskschedulerengine.codeplex.com/

posted @   花儿笑弯了腰  阅读(7312)  评论(9编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示