我有一个使用Windows Merlin角色创建的任务助手应用程序,它将提醒在特定时间完成的几项任务。
我希望Merlin在特定的预定义时间(例如10:00 AM)宣布任务,该时间已由用户在小待办事项列表数据库中设置。
如果我每分钟检查一次,那么它会淹没CPU,如果不是至少它将使CPU忙碌。如何实现这一点。
如果大约有10个任务,则很难比较每个任务。
答案 0 :(得分:2)
每分钟检查应该没问题 - 你的CPU会轻松处理这个问题。 如果你不想这样做,你可以创建一个小的Task,它使用Sleep等待下一个预定义的时间,然后在另一个任务/线程中执行你的任务。
这不应该使用超过需要的CPU。
这可能是(伪代码)这样做:
void ScheduleNext()
{
var tasks = GetTasksByTimeAscending();
var nextTask = tasks.FirstOrDefault();
if (nextTask == null) return;
System.Threading.Task.Factory.StartNew(() => MyScheduler(nextTask));
}
void MyScheduler(MyTask task)
{
var now = DateTime.Now;
if (task.StartTime > now)
{
var timeToWait = task.StartTime.Substract(now);
System.Threading.Thread.Sleep(timeToWait);
}
System.Threading.Task.Factory.StartNew(task.Action);
ScheduleNext();
}
当然,如果您愿意,可以插入取消和错误处理支持。
答案 1 :(得分:1)
一些想法,因为我不知道你所有的约束:
希望这能让你有足够的想法开始。