asp.net 对于计划任务的整理,支持多个任务
时间:2010-08-27 来源:风骚net
最近研究了一下计划任务 task的实现,做了一下整理。
首先创建类

using System.Threading;
namespace Metrial
{
/// <summary>
/// TaskScheduler 的摘要说明
/// </summary>
public class TaskScheduler
{
/// <summary>
/// 执行方法接口
/// </summary>
public interface ISchedulerJob
{
/// <summary>
/// 执行方法
/// </summary>
void Execute();
}
/// <summary>
/// 任务sample1
/// </summary>
public class Method1 : ISchedulerJob
{
public void Execute()
{
//需要定时执行的方法1
}
}
/// <summary>
/// 任务sample2
/// </summary>
public class Method2 : ISchedulerJob
{
public void Execute()
{
//需要定时执行的方法2
}
}
// 接下来,我们建立一个配置对象,告诉调度引擎执行什么任务和执行的时间间隔。
/// <summary>
///
/// </summary>
public class SchedulerConfiguration
{
//时间间隔
//任务列表
/// <summary>
///
/// </summary>
private readonly ArrayList jobs = new ArrayList();
/// <summary>
/// 线程睡眠时间设置
/// </summary>
/// <value>The sleep interval.</value>
public int SleepInterval { get; private set; }
/// <summary>
/// 需完成的工作列表
/// </summary>
/// <value>The jobs.</value>
public ArrayList Jobs { get { return jobs; } }
public SchedulerConfiguration(int newSleepInterval)
{
SleepInterval = newSleepInterval;
}
}
//下面就是调度引擎,定时执行配置对象的任务
/// <summary>
///
/// </summary>
public class Scheduler
{
/// <summary>
///
/// </summary>
private readonly SchedulerConfiguration configuration;
/// <summary>
/// Initializes a new instance of the <see cref="Scheduler"/> class.
/// </summary>
/// <param name="config">The config.</param>
public Scheduler(SchedulerConfiguration config)
{
configuration = config;
}
/// <summary>
/// Starts this instance.
/// </summary>
public void Start()
{
while (true)
{
//执行每一个任务
foreach (ISchedulerJob job in configuration.Jobs)
{
var myThreadDelegate = new ThreadStart(job.Execute);
var myThread = new Thread(myThreadDelegate);
myThread.Start();
}
Thread.Sleep(configuration.SleepInterval);
}
}
}
}
}
接着实现计划的方法

{
var config = new TaskScheduler.SchedulerConfiguration(1000 * 60 * 10);
config.Jobs.Add(new TaskScheduler.Method1());
config.Jobs.Add(new TaskScheduler.Method2());
var scheduler = new TaskScheduler.Scheduler(config);
var myThreadStart = new System.Threading.ThreadStart(scheduler.Start);
var schedulerThread = new System.Threading.Thread(myThreadStart);
schedulerThread.Start();
}
最后在Global.asax的Application_Start事件中调用Task方法。具体方法可在TaskScheduler中的Method1,Method2实现。
相关阅读 更多 +