菜鸟之旅——初识.NET

  入坑.Net
也早已两年多了,既然在微软.Net 类别下混,对.Net
连串也急需了解一下,当然这个文化也都是查看资料都可以查到的,这里关键是对自己所学的重整,况且近期的上学有些闭门造车的意味,现在想写出来和豪门大快朵颐一下,假设精晓有不是,欢迎园友指正!

这一次是因为品种的需求:什么定时发送邮件通告,定时筛采撤消客户下单未支付的订单

  .Net
Framework经历了成百上千本子的更动,不过它的框架没有太大的变化,包括了国有语言运行时(CLR)、基类库和.Net
Framework类库、公共语言专业和支撑的言语;

重复捡起定时器,在网上翻来找去找到—-Quartz.Net老字号了并不意味它就实在老了哦

        图片 1

github:https://github.com/quartznet/quartznet

  公共语言运行时(CLR)

  CLR是.Net Framework的根基内容,也是.Net程序的周转条件,可以将其当做一个在进行时管理代码的代办,它提供了内存管理、线程管理、代码执行、垃圾收集(GC)和长距离处理等着力服务,并且还强制实施严峻的品种安全以及可增强安全性和可靠性的其它形式的代码准确性。

  C#抑或此外各个语言编写的源代码通过编译器生成IL代码托管(IL也称托管代码),最终收获一个托管模块,一个或四个托管模块组合程序集(assembly)交给CLR运行,不过CLR仍旧无法向来和操作系统(OS)直接互动,还亟需JIT引擎来举行“翻译”,变成总结机可以辨认的二进制代码交给操作系统执行。

  对了此间涉及了CLR就只可以涉及托管代码非托管代码:

  托管代码 (managed
code)是由CLR(而不是一向由操作系统)执行的代码。托管代码应用程序可以赢得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全协助等。那一个劳动帮扶提供单身于阳台和言语的、统一的托管代码应用程序行为。在托管执行环境中使用托管代码及其编译,可以制止过多典型的诱致安全黑洞和不安宁程序的编程错误。同样,许多不保险的统筹也自行的被提高了安全
性,例如
类型安全检查,内存管理和刑满释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减小代码的编写量。这就意味着更短的开发时间和更健壮的先后。

  非托管代码 (unmanaged
code)是指在集体语言运行库环境的表面,由操作系统直接执行的代码。非托管代码必须提供温馨的污物回收、类型检查、安全匡助等劳动;它与托管代码不同,后者从集体语言运行库中赢得这个服务。

理所当然介绍的园圃里随笔很多跟官方文档https://www.quartz-scheduler.net介绍的都挺清楚的!用起来很便利!

  基类库和.Net Framework

  基类库(NET Standard
Library)包含帮忙底层操作的一多级通用效用,覆盖了聚众操作、线程协助、代码生成、输入输出(IO)、映射和武威等领域的始末。其它,.Net Core也是基类库的落实,当然也有自己非常的实现,并且与.Net
Framework不同,它是永葆跨平台的,详细学习会在持续的博客中享受。

  .Net Framework是基类库在windows操作系统下的贯彻,包含类库:数据库访问(ADO
.NET等)、XML帮忙、目录服务(LDAP等)、正则表明式和音讯援助;并且还落实无数大家开发人士通常使用的应用程序开发技术:ASP
.NET技术、WinFroms技术和WPF技术等高档编程技术。

so!接下去自己概括介绍一下Quartz.Net框架设计 
下图借用园友的应有不会介意

  公共语言专业

  很不满,我对这公共语言专业(CLS)也不打听,也只能说说大概。

  .Net辅助广大语言,有C#、VB等,每种语言必定带着团结的表征,可是我们都能够通过编译在CLR上边跑,并且都得以与其他语言进行互操作,这都是因为兼具语言都服从了CLS;.NET
Framework将CLS定义为一组规则,所有.NET语言都应当遵照此规则才能创设与任何语言可互操作的应用程序,但要注意的是为了使各语言可以互操作,只可以使用CLS所列出的职能对象,这个效应统称为与CLS包容的效率。再往下的底细实现就不知晓了,把这些也列在后头的就学计划当中吧。

图片 2

  总结

  本篇博客就写到这吗,内容也差不多是田园里内容,也期望可以援助到想入坑.Net的朋友们。

 

园子中追寻发现早已有同学去实践了,这里引用一下各位大大的博文地址(应该不会介意,嘻嘻),我们也足以参考学习:
http://www.cnblogs.com/knowledgesea/p/5145239.html Quartz.net持久化与集群部署开发详解
http://www.cnblogs.com/mushroom/p/4231642.html#3760225 Net作业调度(四)—quartz.net持久化和集群
http://www.cnblogs.com/lanxiaoke/p/6629481.html 任务调度之持久化(基于Quartz.net)
http://www.cnblogs.com/lanxiaoke/p/6637714.html 任务调度之集群(基于Quartz.net)
http://www.cnblogs.com/huangxincheng/p/6916246.html 应用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】

在此博主自己将Quartz.net的所需类目做了五遍整合,大伙可以瞅瞅**

图片 3图片 4

 1 using Quartz;
 2 using Quartz.Impl;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 using Wshelper.Caching;
 9 using Wshelper.Logging;
10 
11 namespace Commons.Helpers
12 {
13     public class QuartzHelper
14     {
15         /// <summary>
16         /// 时间间隔执行任务
17         /// </summary>
18         /// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
19         /// <param name="seconds">时间间隔(单位:毫秒)</param>
20         public static void ExecuteInterval<T>(int seconds) where T : IJob
21         {
22             ISchedulerFactory factory = new StdSchedulerFactory();
23             IScheduler scheduler = factory.GetScheduler();
24 
25             //IJobDetail job = JobBuilder.Create<T>().WithIdentity("job1", "group1").Build();
26             IJobDetail job = JobBuilder.Create<T>().Build();
27 
28             ITrigger trigger = TriggerBuilder.Create()
29                 .StartNow()
30                 .WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds).RepeatForever())
31                 .Build();
32 
33             scheduler.ScheduleJob(job, trigger);
34 
35             scheduler.Start();
36         }
37         /// <summary>
38         /// 指定时间执行任务
39         /// </summary>
40         /// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
41         /// <param name="cronExpression">cron表达式,即指定时间点的表达式</param>
42         public static void ExecuteByCron<T>(string cronExpression) where T : IJob
43         {
44             ISchedulerFactory factory = new StdSchedulerFactory();
45             IScheduler scheduler = factory.GetScheduler();
46 
47             IJobDetail job = JobBuilder.Create<T>().Build();
48 
49             //DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
50             //DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3);
51 
52             ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
53                 //.StartAt(startTime).EndAt(endTime)
54                 .WithCronSchedule(cronExpression)
55                 .Build();
56 
57             scheduler.ScheduleJob(job, trigger);
58 
59             scheduler.Start();
60 
61             //Thread.Sleep(TimeSpan.FromDays(2));
62             //scheduler.Shutdown();
63         }
64     }
65 
66     #region 任务执行例
67     public class MyJob : IJob
68     {
69         ILogger logger = LoggerFactory.CreateLog();
70         public void Execute(IJobExecutionContext context)
71         {
72             //向c:\Quartz.txt写入当前时间并换行
73             //System.IO.File.AppendAllText(@"c:\Quartz.txt", DateTime.Now + Environment.NewLine);
74             ICache cache = new MemoryCacheFactory().Create();
75             cache.Clear();
76             logger.Info("时间:" + DateTime.Now.ToString() + "---------系统自动更新缓存!");
77         }
78     }
79     #endregion
80 }

View Code

 

启动:

图片 5图片 6

1 public static void QuartzHelp()
2         {
3             //#region Quartz调度任务
4             string cronExpression = "1 0 0 * * ? ";  //这是指每天的0点执行任务
5             QuartzHelper.ExecuteByCron<MyJob>(cronExpression);  //这是调用Cron计划方法
6             //#endregion
7         }

View Code

 

 

Quartz.Net 作者曾经更新了扶助.net standrad2.0了,就表示可以在.net
core平台使用了,下载地址:https://www.nuget.org/packages/Quartz/3.0.0-beta1,更新表明地方:https://www.quartz-scheduler.net/2017/10/08/quartznet-3.0-beta1-released.html,相信不久后头就会发表release版本,届时.net
core框架开发就不怕没有定时器的支撑了,~( ̄▽ ̄~)(~ ̄▽ ̄)~