不用写Windows服务实现定时器功能(FluentScheduler )
MacBook Pro 只有四个 USB Type-C 接口是否错了?
FluentScheduler 是什么?
Automated job scheduler with fluent interface.
这是作者在 Github 上的介绍,就是一个定时任务管理器。在 .Net 下类似的有微软的 Timer 、 Quartz.NET 、 FluentScheduler 以及Windows服务等,关于 Quartz.NET 的使用几乎和 Java 下的 Quartz 没什么区别,我之前写过一篇 Spring 使用 Quartz 任务调度定时器 是关于 Quartz 的。
定时任务或者说作业调度,可能也只有在你指定一个时间做统计、发邮件或者一些你想完成的业务逻辑时有用,这也是它出现的目的。
如何使用 FluentScheduler ?
我是推荐你去作者的 Github 去看看源码或例子,地址: https://github.com/fluentscheduler/FluentScheduler
当然,这里我用作者的例子做了演示和翻译,保证谁都能看的懂。
一、安装FluentScheduler
程序包
打开程序包管理控制台,输入Install-Package FluentScheduler
即可。步骤:状态栏选择 工具 - 库程序包管理器 - 程序包管理控制台,如下图:
输入Install-Package FluentScheduler
。
二、写代码
我这里只简单贴一下作者的示例代码,更推荐你去 Github 看,但我随手翻译了一下,或许更容易阅读一些。
public class Demo : Registry
{
public Demo()
{
// Schedule an IJob to run at an interval
// 立即执行每两秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)
Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds(); // Schedule an IJob to run once, delayed by a specific time interval
// 延迟一个指定时间间隔执行一次计划任务。(当然,这个间隔依然可以是秒、分、时、天、月、年等。)
Schedule<MyJob>().ToRunOnceIn(5).Seconds(); // Schedule a simple job to run at a specific time
// 在一个指定时间执行计划任务(最常用。这里是在每天的下午 1:10 分执行)
Schedule(() => Trace.WriteLine("It‘s 1:10 PM now.")).ToRunEvery(1).Days().At(13, 10); Schedule(() => { // 做你想做的事儿。
Trace.WriteLine("It‘s 1:10 PM now."); }).ToRunEvery(1).Days().At(13, 10); // Schedule a more complex action to run immediately and on an monthly interval
// 立即执行一个在每月的星期一 3:00 的计划任务(可以看出来这个一个比较复杂点的时间,它意思是它也能做到!)
Schedule<MyComplexJob>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0); // Schedule multiple jobs to be run in a single schedule
// 在同一个计划中执行两个(多个)任务
Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes(); } } public class MyJob : IJob
{ void IJob.Execute()
{
Trace.WriteLine("现在时间是:"+DateTime.Now);
}
} public class MyOtherJob : IJob
{ void IJob.Execute()
{
Trace.WriteLine("这是另一个 Job ,现在时间是:" + DateTime.Now);
}
} public class MyComplexJob : IJob
{ void IJob.Execute()
{
Trace.WriteLine("这是比较复杂的 Job ,现在时间是:" + DateTime.Now);
}
}
三、初始化
在Global.asax
中加入一句
JobManager.Initialize(new Demo());
上面是简单的使用,其实已经足够了,当然还有更多变态的需求,作者也在文档里写了,比如这个:你想执行一个计划任务,每周一 14:00 运行。但现在是星期一上午 10:00 ,那你的程序应该在今天运行还是在下周星期一?这里用到了 ToRunEvery
。
还有并发任务的处理,有兴趣可以去看看。
总结
FluentScheduler 是 .Net 下,可以让你轻松实现定时任务的工具,不需要再去写Windows服务了,更重要的是时间设置起来灵活很多,定时任务难点不就是在这么
链接:http://www.cnblogs.com/mafly/p/FluentScheduler.html
不用写Windows服务实现定时器功能(FluentScheduler )的更多相关文章
- C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)
功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...
- 用python写windows服务
用python写windows服务(1) 以python2.5 为例需要软件 * python 2.5 * pywin32(与2.5 版本相匹配的) Service Control Ma ...
- 解决windows 服务中定时器timer 定时偶尔失效 问题
最近做个windows 服务,功能是:定时执行一个任务:自动登录到一个网站后,点击相关网面上的按钮button. 在处理的过程中发现定时器老是不定时的失效,失效时间没有规律. 由于刚开始处于测试阶段, ...
- c#写windows服务
序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总 ...
- c#写windows服务(转)
序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总 ...
- 【python】使用python写windows服务
背景 运维windows服务器的同学都知道,windows服务器进行批量管理的时候非常麻烦,没有比较顺手的工具,虽然saltstack和ansible都能够支持windows操作,但是使用起来总感觉不 ...
- c#写windows服务 小demo
前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总结下, ...
- windows服务加定时器实现
首先在项目中添加windows服务 然后双击“MainService.cs”,在上面点右键“打开代码” 以下是我的实例代码 partial class MainService : ServiceBas ...
- C# 使用vs2013 写 windows服务
第一步:添加windows服务项目 并起一个 好看的名字 第二步:添加安装程序 第三步:右键点击serviceProcessInstaller1属性,在Account中选择LocalSystem 第四 ...
随机推荐
- css实现了hover显示title的效果
<div data-title="hello, world">hello...</div> <style> div { position: re ...
- shell中$0,$?,$!等的特殊用法
变量说明: $$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表 ...
- SSH--1
package com.etc.action; import java.io.IOException; import java.io.PrintWriter; import java.util.Has ...
- fping tcping hping nmap nc
[root@test ~]# fping -a -g 192.168.40.1 192.168.40.240 |nl #-a 扫描alive主机,-g扫描一个段的ip地址 [root@test ...
- 【转载】Python与ArcGIS Engine的集成
本文转载自Fransico<Python与ArcGIS Engine的集成> 1 在Python中调用AO类库 1.1 准备工作 本文所使用环境:ArcGIS 10.0.Python ...
- No module named django.core
在虚拟环境中将django-admin.py startproject tango_with_django_project替换为django-admin startproject tango_with ...
- ubuntu系统修改mysql字符集
1.进入mysql,查看默认字符集: mysql>show variables like 'char%'; 2.退出mysql; 3.输入命令:sudo gedit /etc/mysql/con ...
- PHP判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因返回false ...
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
[强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...
- MySQL replace into 使用详解 及 注意事项
REPLACE的运行与INSERT很相似.只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除.注意:除非表 ...