asp.net 计划任务管理程序实现,多线程任务加载
2024-07-10 12:38:31
供稿:网友
 
asp.net下实现可以将计划任务的方法放在global里,使用一个统一的任务管理类来管理各种任务的执行,做到并行不悖! 
下面是我写的一个方法,希望起个抛砖引玉的作用!大家一起学习下: 
第一步定义一个接口,用来规范任务必须要实现的动作,该接口只有一个方法(简单起见): 
 代码如下: 
/// <summary> 
/// 工作单元接口,定义一个计划任务必须完成的工作 
/// </summary> 
public interface IScheduledTask 
{ 
/// <summary> 
/// 任务执行 
/// </summary> 
void Execute(); 
} 
 
第二步,定义一个类,用来管理计划任务的执行和关闭: 
 代码如下: 
/// <summary> 
/// 用来执行计划任务的基本对象 
/// </summary> 
public class ScheduledTask 
{ 
private static readonly ScheduledTask _ScheduledTask = null; 
private Timer UpdateTimer = null; 
/// <summary> 
/// 间隔时间,单位为毫秒 
/// </summary> 
private int interval = 10 * 1000; 
/// <summary> 
/// 间隔时间,单位为毫秒 
/// </summary> 
public int Interval 
{ 
get { return this.interval; } 
set { this.interval = value; } 
} 
/// <summary> 
/// 任务是否完成标志 
/// </summary> 
private int _IsRunning; 
/// <summary> 
/// 静态构造函数,保证实例的唯一性 
/// </summary> 
static ScheduledTask() 
{ 
_ScheduledTask = new ScheduledTask(); 
} 
/// <summary> 
/// 任务队列 
/// </summary> 
private ArrayList tasks = new ArrayList(); 
/// <summary> 
/// 任务队列 
/// </summary> 
public ArrayList Tasks { get { return tasks; } } 
/// <summary> 
/// 返回任务实例 
/// </summary> 
/// <returns></returns> 
public static ScheduledTask Instance() 
{ 
return _ScheduledTask; 
} 
/// <summary> 
/// 执行任务 
/// </summary> 
public void Start() 
{ 
if (UpdateTimer == null) 
{ 
UpdateTimer = new Timer(new TimerCallback(UpdateTimerCallback), null, interval, interval); 
} 
} 
/// <summary> 
/// 任务处理 
/// </summary> 
/// <param name="sender"></param> 
private void UpdateTimerCallback(object sender) 
{ 
if (Interlocked.Exchange(ref _IsRunning, 1) == 0) 
{ 
try 
{ 
//执行多个任务 
foreach (IScheduledTask task in Tasks) 
{ 
ThreadStart myThreadDelegate = new ThreadStart(task.Execute); 
Thread myThread = new Thread(myThreadDelegate); 
myThread.Start(); 
} 
} 
catch (Exception ex) 
{ 
//错误处理 
CreateLog(ex.Message, true); 
} 
finally 
{ 
Interlocked.Exchange(ref _IsRunning, 0); 
} 
} 
} 
/// <summary> 
/// 取消任务 
/// </summary> 
public void Stop()