1. 自定义QuartZ的并发锁
1 using System;
2 using System.Threading;
3 using log4net;
4 using Quartz;
5
6 namespace HK.Gramma.Business
7 {
8 public class FirstTimeJob : IJob
9 {
10 /// <summary>
11 /// 日志工具
12 /// </summary>
13 private static readonly ILog Logger = LogManager.GetLogger("FirstTimeJob");
14
15 /// <summary>
16 /// 线程对象
17 /// </summary>
18 private static readonly object SyncObj = new object();
19
20 /// <summary>
21 /// 任务运行标识
22 /// </summary>
23 private static bool _isRunning;
24
25 /// <summary>
26 /// 线程访问计数
27 /// </summary>
28 private static int _visitCount = 0;
29
30 /// <summary>
31 /// 执行定时任务
32 /// </summary>
33 /// <param name="context">上下文</param>
34 public void Execute(IJobExecutionContext context)
35 {
36 lock (SyncObj)
37 {
38 if (_isRunning)
39 {
40 return;
41 }
42
43 _isRunning = true;
44 }
45
46 try
47 {
48 Logger.InfoFormat("开始任务,线程ID={0}", Thread.CurrentThread.ManagedThreadId);
49 Thread.Sleep(5000);
50 _visitCount++;
51 Logger.InfoFormat("结束任务,线程ID={0},访问总数={1}", Thread.CurrentThread.ManagedThreadId, _visitCount); }
52 catch (Exception ex)
53 {
54 Logger.ErrorFormat("任务异常\r\n{0}", ex);
55 }
56 finally
57 {
58 lock (SyncObj)
59 {
60 _isRunning = false;
61 }
62 }
63 }
64 }
65 }
2 using System.Threading;
3 using log4net;
4 using Quartz;
5
6 namespace HK.Gramma.Business
7 {
8 public class FirstTimeJob : IJob
9 {
10 /// <summary>
11 /// 日志工具
12 /// </summary>
13 private static readonly ILog Logger = LogManager.GetLogger("FirstTimeJob");
14
15 /// <summary>
16 /// 线程对象
17 /// </summary>
18 private static readonly object SyncObj = new object();
19
20 /// <summary>
21 /// 任务运行标识
22 /// </summary>
23 private static bool _isRunning;
24
25 /// <summary>
26 /// 线程访问计数
27 /// </summary>
28 private static int _visitCount = 0;
29
30 /// <summary>
31 /// 执行定时任务
32 /// </summary>
33 /// <param name="context">上下文</param>
34 public void Execute(IJobExecutionContext context)
35 {
36 lock (SyncObj)
37 {
38 if (_isRunning)
39 {
40 return;
41 }
42
43 _isRunning = true;
44 }
45
46 try
47 {
48 Logger.InfoFormat("开始任务,线程ID={0}", Thread.CurrentThread.ManagedThreadId);
49 Thread.Sleep(5000);
50 _visitCount++;
51 Logger.InfoFormat("结束任务,线程ID={0},访问总数={1}", Thread.CurrentThread.ManagedThreadId, _visitCount); }
52 catch (Exception ex)
53 {
54 Logger.ErrorFormat("任务异常\r\n{0}", ex);
55 }
56 finally
57 {
58 lock (SyncObj)
59 {
60 _isRunning = false;
61 }
62 }
63 }
64 }
65 }