CSFramework.WebApi时钟定时作业异步处理程序(IThreadHandler接口)实现


需求介绍
后端服务器通常有定时发送消息的需求,如发送日报表,定时处理作业等。
CSFramewrok.WebApi后端框架提供定时处理任务机制满足用户需求。
下面详细讲解实现步骤:
1. 定义一个类,实现IThreadHandler接口。
C# Code:
using CSFramework.DB;
using FirsHaier.MPCClient;
using FirsHaier.WebApi.Core;
using FirsHaier.WebApi.DataAccess;
using FirsHaier.WebApi.Foundation;
using FirsHaier.WebApi.Models;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Timers;
namespace FirsHaier.WebApi.Commands
{
/// <summary>
/// CSFramework.WebApi定时作业异步处理程序(IThreadHandler接口)实现
/// </summary>
public class ThreadSync : IThreadHandler
{
private Hashtable _SendList = new Hashtable();//已处理记录
private Timer _Timer;
private string _SendMsgTime = "21:01";//每天同步时间
private int _Interval = 1000 * 60;//间隔1分钟(毫秒)
public ThreadSync()
{
//web.config配置,获取同步时间
_SendMsgTime = System.Configuration.ConfigurationManager.AppSettings["SyncTime"];
}
//启动时钟
public void Start()
{
_Timer = new Timer();
_Timer.Interval = _Interval;
_Timer.Elapsed += _Timer_Elapsed;
_Timer.Start();
}
//暂停时钟
public void Stop()
{
_Timer.Stop();
_Timer.Dispose();
}
private string _Key;
//时钟事件
private void _Timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
_Key = DateTime.Now.ToString("yyyyMMddHHmm");
if (_SendList.ContainsKey(_Key)) return;//当天已发送
if (_SendMsgTime != DateTime.Now.ToString("HH:mm")) return;//发送时间不匹配
_Timer.Stop();
LogManager.Log.Write("MPC-SYNC", "开始进行MPC付款预算状态同步....");
DateTime begin = DateTime.Now;
IDatabase db = DatabaseProvider.GetDatabase("Your Database");
db.GetTable("SELECT * FROM TBUSER");
//
//处理逻辑。。。。。。。。
//
_SendList.Add(_Key, _Key);//处理完毕,添加已处理标记
double second = (DateTime.Now - begin).TotalMilliseconds;
LogManager.Log.Write("MPC-SYNC", "同步结束,耗时(s):" + second.ToString());
_Timer.Start();
}
catch (Exception ex)
{
Log2Local.Instance.WriteInfo(ex.Message);
_Timer.Start();
}
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
using CSFramework.DB;
using FirsHaier.MPCClient;
using FirsHaier.WebApi.Core;
using FirsHaier.WebApi.DataAccess;
using FirsHaier.WebApi.Foundation;
using FirsHaier.WebApi.Models;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Timers;
namespace FirsHaier.WebApi.Commands
{
/// <summary>
/// CSFramework.WebApi定时作业异步处理程序(IThreadHandler接口)实现
/// </summary>
public class ThreadSync : IThreadHandler
{
private Hashtable _SendList = new Hashtable();//已处理记录
private Timer _Timer;
private string _SendMsgTime = "21:01";//每天同步时间
private int _Interval = 1000 * 60;//间隔1分钟(毫秒)
public ThreadSync()
{
//web.config配置,获取同步时间
_SendMsgTime = System.Configuration.ConfigurationManager.AppSettings["SyncTime"];
}
//启动时钟
public void Start()
{
_Timer = new Timer();
_Timer.Interval = _Interval;
_Timer.Elapsed += _Timer_Elapsed;
_Timer.Start();
}
//暂停时钟
public void Stop()
{
_Timer.Stop();
_Timer.Dispose();
}
private string _Key;
//时钟事件
private void _Timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
_Key = DateTime.Now.ToString("yyyyMMddHHmm");
if (_SendList.ContainsKey(_Key)) return;//当天已发送
if (_SendMsgTime != DateTime.Now.ToString("HH:mm")) return;//发送时间不匹配
_Timer.Stop();
LogManager.Log.Write("MPC-SYNC", "开始进行MPC付款预算状态同步....");
DateTime begin = DateTime.Now;
IDatabase db = DatabaseProvider.GetDatabase("Your Database");
db.GetTable("SELECT * FROM TBUSER");
//
//处理逻辑。。。。。。。。
//
_SendList.Add(_Key, _Key);//处理完毕,添加已处理标记
double second = (DateTime.Now - begin).TotalMilliseconds;
LogManager.Log.Write("MPC-SYNC", "同步结束,耗时(s):" + second.ToString());
_Timer.Start();
}
catch (Exception ex)
{
Log2Local.Instance.WriteInfo(ex.Message);
_Timer.Start();
}
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2. IThreadHandler接口
3. WebApi框架提供的任务管理器ThreadHandler类
C# Code:
/// <summary>
/// 多线程处理程序接口
/// </summary>
public interface IThreadHandler
{
void Start();
void Stop();
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 多线程处理程序接口
/// </summary>
public interface IThreadHandler
{
void Start();
void Stop();
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
C# Code:
/// <summary>
/// 用户自定义多线程管理器
/// </summary>
public static class ThreadHandler
{
private static List<IThreadHandler> _List = new List<IThreadHandler>();
public static List<IThreadHandler> Handlers { get { return _List; } }
public static void Registe(IThreadHandler handler)
{
_List.Add(handler);
}
public static void Start()
{
foreach (IThreadHandler H in _List) H.Start();
}
public static void Stop()
{
foreach (IThreadHandler H in _List) H.Stop();
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 用户自定义多线程管理器
/// </summary>
public static class ThreadHandler
{
private static List<IThreadHandler> _List = new List<IThreadHandler>();
public static List<IThreadHandler> Handlers { get { return _List; } }
public static void Registe(IThreadHandler handler)
{
_List.Add(handler);
}
public static void Start()
{
foreach (IThreadHandler H in _List) H.Start();
}
public static void Stop()
{
foreach (IThreadHandler H in _List) H.Stop();
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
4. 任务管理器ThreadHandler注册处理程序
C# Code:
//MPC付款预算进度同步
ThreadHandler.Registe(new ThreadSync());
//启动线程
if (start && ThreadHandler.Handlers.Count > 0)
ThreadHandler.Start();
ThreadHandler.Registe(new ThreadSync());
//启动线程
if (start && ThreadHandler.Handlers.Count > 0)
ThreadHandler.Start();
ASP.NET WebApi快速开发框架|APP后端框架-标准版V1.0





扫一扫加微信


版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网