在.NET Core中实现一个轻量且极简的任务调度器(ScheduleTask)可以是一个有趣且实用的任务。以下是一个简单的例子,展示如何创建一个能够按固定时间间隔执行任务的基础调度器。
首先,我们需要定义一个任务接口,这样我们可以为调度器提供不同的任务实现:
csharppublic interface IScheduledTask
{
void Execute();
}
然后,我们可以创建一个简单的任务调度器类,它使用一个定时器(Timer)来定期执行任务:
csharpusing System;
using System.Threading;
using System.Threading.Tasks;
public class TaskScheduler
{
private readonly IScheduledTask _task;
private readonly TimeSpan _interval;
private Timer _timer;
public TaskScheduler(IScheduledTask task, TimeSpan interval)
{
_task = task ?? throw new ArgumentNullException(nameof(task));
_interval = interval;
}
public void Start()
{
_timer = new Timer(TimerCallback, null, TimeSpan.Zero, _interval);
}
public void Stop()
{
_timer?.Change(Timeout.Infinite, Timeout.Infinite);
_timer?.Dispose();
_timer = null;
}
private void TimerCallback(object state)
{
_task.Execute();
}
}
在这个例子中,TaskScheduler 类接受一个实现了 IScheduledTask 接口的对象和一个时间间隔 TimeSpan。当调用 Start 方法时,它会创建一个定时器,该定时器会立即开始执行任务,并且之后每隔指定的时间间隔执行一次。调用 Stop 方法则会停止定时器并释放资源。
现在,我们可以创建一个具体的任务类来实现 IScheduledTask 接口:
csharppublic class SimpleTask : IScheduledTask
{
public void Execute()
{
Console.WriteLine("Task executed at: " + DateTime.Now);
}
}
最后,我们可以在程序的主入口点(如 Main 方法)中实例化并启动调度器:
csharpclass Program
{
static void Main(string[] args)
{
var task = new SimpleTask();
var scheduler = new TaskScheduler(task, TimeSpan.FromSeconds(5));
scheduler.Start();
// Keep the console open to see the scheduled task executions.
Console.WriteLine("Press any key to stop the scheduler...");
Console.ReadKey();
scheduler.Stop();
}
}
在这个例子中,我们创建了一个每5秒执行一次的简单任务,并启动了一个调度器来执行它。程序会保持打开状态,以便我们可以看到任务按计划执行。按任意键后,调度器会停止,程序结束。
这只是一个非常基础的例子,实际的任务调度系统可能会涉及更复杂的特性,比如任务的优先级、任务的依赖关系、任务的持久化、异常处理、动态添加或移除任务等。如果需要这些高级特性,你可能需要考虑使用现有的任务调度库,如 Quartz.NET 或 Hangfire。
本文暂时没有评论,来添加一个吧(●'◡'●)