一、业务需求

平台首页,有几个指标统计,产品不要求实时性,觉得一天更新一次可以接受。

最后决定用FluentScheduler定时执行统计,redis缓存结果。

每天晚上1点进行定时任务统计,将统计结果缓存到redis中,业务接口直接从reids里拿统计数据。

二、开始撸代码

方式一:多个任务 + 不同时间段执行(这个没有实现,大家可以使用 一个从0点开始的分钟数,秒数等,自定义一个接口,根据规则去调用Schedule中的方法)

using System;
using System.Linq;
using System.Threading.Tasks;
using FluentScheduler; namespace Common
{
// 自己定义了一个接口,目前只有一个方法,大家可以根据自己的需求添加接口,比如定义一个执行任务的时间接口等
public interface IScheduleTask
{
void Execute();
} public class ScheduleTask : Registry
{
public ScheduleTask()
{
// 获取已加载到此应用程序域的执行上下文中的程序集(因为有延迟加载机制,
// 未加载到应用程序域的时候会报错,一般初始化的时候可能会再现问题)
// var types = AppDomain.CurrentDomain.GetAssemblies()
// .SelectMany(a => a.GetTypes()
// .Where(t => t.GetInterfaces()
// .Contains(typeof(IScheduleTask))))
// .ToArray();
var types = Assembly.GetAssembly(typeof(IScheduleTask)).GetTypes()
.Where(t => t.GetInterfaces().Contains(typeof(IScheduleTask))).ToArray();
foreach (Type type in types)
{
IScheduleTask obj = (IScheduleTask)Activator.CreateInstance(type);
Task.Run(() =>
{
//Schedule(() => obj.Execute()).ToRunNow().AndEvery(5).Seconds();// 每5秒执行一次
Schedule(() => obj.Execute()).ToRunEvery(1).Days().At(1, 0);// 每天晚上1点执行
});
}
}
} public class FirstJob : IScheduleTask
{
public void Execute()
{
new RedisHelper().StringSet($"FirstJob{ Guid.NewGuid().ToString()}", "FirstJob执行");// 模拟业务统计一
}
} public class SecondJob : IScheduleTask
{
public void Execute()
{
new RedisHelper().StringSet($"SecondJob{ Guid.NewGuid().ToString()}", "SecondJob执行");// 模拟业务统计二
}
}
}

Application_Start 方法添加  JobManager.Initialize(new ScheduleTask());
方式二:

using System;
namespace Test
{
public class ThreeJob
{
public void Execute()
{
new RedisHelper().StringSet($"ThreeJob{ Guid.NewGuid().ToString()}", "ThreeJob执行");// 模拟业务统计三
}
}
}

Application_Start 方法添加  JobManager.AddJob(() => new ThreeJob().Execute(), t =>{t.ToRunNow().AndEvery(10).Seconds();});

方式三:实现IJob接口中的Execute方法

using System;
using System.Linq;
using System.Threading.Tasks;
using FluentScheduler; namespace Test2
{
public class ScheduleTask : Registry
{
public ScheduleTask()
{
//第二种调用业务方法:
Schedule<FourJob>().ToRunNow().AndEvery(5).Seconds();
}
} public class FourJob : IJob
{
public void Execute()
{
new RedisHelper().StringSet($"FourJob{ Guid.NewGuid().ToString()}", "FourJob执行");// 模拟业务统计四
}
}
}

  Application_Start 方法添加  JobManager.Initialize(new ScheduleTask());

注意: 一般的程序池没有经过特殊设置,一定闲置时间后,程序池会自动回收,导致定时任务不执行;解决办法就是预加载,程序池回收后,模拟一次请求,进行初始化。

设置办法可以参照: https://blog.csdn.net/y1535623813/article/details/76534614

https://www.jianshu.com/p/25d55249dce7

C#定时任务之FluentScheduler的更多相关文章

  1. 使用FluentScheduler和IIS预加载在asp.net中实现定时任务管理

    FluentScheduler介绍 github地址:https://github.com/fluentscheduler/FluentScheduler FluentScheduler是一个简单的任 ...

  2. Windows Service 服务搭配FluentScheduler实现定时任务调度

    Windows Service 服务 创建Windows Service 项目 创建一个Windows Service项目,并将项目名称改为 TaskWindowService 在解决方案资源管理器内 ...

  3. C#定时任务组件之FluentScheduler

    FluentScheduler是.NET开源处理定时任务组件 1.任务的创建注册 public static void TaskActionByMinutes(Action action, int c ...

  4. .NET定时任务执行管理器开源组件–FluentScheduler

    在日常项目里通常会遇到定时执行任务的需求,也就是定时器..NET Framework里关于定时器的类有3个,分别是System.Windows.Forms.Timer.System.Timers.Ti ...

  5. [转]推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler

    在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...

  6. 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器

    在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...

  7. 定时任务FluentScheduler 学习笔记 .net

    第一步添加引用 GitHub源码地址 与详细用法 https://github.com/fluentscheduler/FluentScheduler 下面开始简单的实现 /// <summar ...

  8. ASP.NET MVC 使用FluentScheduler做定时任务

    源代码地址: https://github.com/fluentscheduler/FluentScheduler 使用NuGet安装FluentScheduler 这是我实际项目中用到的代码,也可看 ...

  9. 定时任务FluentScheduler

    1.Nuget 安装包 2.创建3个不同的任务 public class MyJob : IJob { void IJob.Execute() { Trace.WriteLine("现在时间 ...

随机推荐

  1. Angular build编译内存溢出"JavaScript heap out of memory"的解决办法

    关于最近使用angular build编译打包的时候,遇到内存溢出的突发情况,做一个简单记录 编译报错如下↓↓↓ 报错信息很直观地指出是内存溢出了.是什么导致了内存溢出呢?其根本原因在于 nodejs ...

  2. [转帖]浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元

    浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元 https://t.cj.sina.com.cn/articles/view/3172142827/bd130eeb01 ...

  3. windows 装mac

    必备条件: 1.vmware虚拟机 2.给相应版本虚拟机打mac补丁 3.用securable检测CPU支持虚拟化设置 4.mac镜像文件 5.这时候还不能启动虚拟机,还需要在引导文件里面进行参数修改 ...

  4. 设计模式:模板方法(Template method)

    首先我们先来看两个例子:冲咖啡和泡茶.冲咖啡和泡茶的基本流程如下: 所以用代码来创建如下: 咖啡:Caffee.java public class Coffee { void prepareRecip ...

  5. GC垃圾回收理解

    内存的计算 -Xms1G -Xmx2G -Xmn500M -XX:MaxPermSize=64M -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3, 请问eden ...

  6. c++练习之模板类的练习

    编写一维数组模板.可以无限扩展,任意数据类型,可以进行插入,删除,查找,排序等操作 #include<iostream> using std::cout; using std::cin; ...

  7. 坦克大战--Java类型 ---- (3)实现socket通信

    一.实现思路 使用socket通信的一些方法来实现socket通信,客户端和服务端两边需要约定好通信的接口Port(尽量选高的),客户端需要服务端的IP地址,以实现数据交流. 同时,客户端和服务端需要 ...

  8. JDK 监控和故障处理工具总结 (转)

    出处:  JDK 监控和故障处理工具总结 JDK 监控和故障处理工具总结 JDK 命令行工具 jps:查看所有 Java 进程 jstat: 监视虚拟机各种运行状态信息 jinfo: 实时地查看和调整 ...

  9. IDEA导入外部code style

    至于用何种代码风格, 根据自己团队规范来吧 提供一个Google的IDEA java风格吧 Github地址 原文地址:https://blog.csdn.net/sasuke__/article/d ...

  10. Spring Cloud Alibaba nacos 配置中心使用

    背景 上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心 spring-cloud-alibaba-basis 创建基础依赖 首先我们创建一个spring-cloud-a ...