程序大概流程,如图所示。

解决方案 »

  1.   

    建一张任务表,规定好是否重复执行,执行时间,下次执行时间,然后timer启动不断去扫面这张表就是了
      

  2.   

    谢谢。那这张表最好用什么方式呢?数据库、xml、还是直接放在内存里面?
    用来循环遍历的队列,用List,还是ConcurrentQueue?
      

  3.   

    Quartz.net:https://github.com/quartznet/quartznet
      

  4.   

    谢谢。那这张表最好用什么方式呢?数据库、xml、还是直接放在内存里面?
    用来循环遍历的队列,用List,还是ConcurrentQueue?
    --------------------------------------------------------------
    任务表,最后一次执行时间,执行频率(每隔N分钟),是否重复执行可要可不要因为既然是任务就多半是重复的吧,,是否正在执行,。其他字段自己看着办, sql,sqllite 都可以,这个不是重点,程序启动后扫描这个表,用timer, while true随便,不过建议用while true,因为每个任务执行间隔可能不一样,扫描后得到当前时间,在判断是否已经达到执行频率,如果达到就开起thread (一定要开启线程,让N个任务同时走,不要让走A任务的时候耽误B任务,切记),执行,同时把该正在执行的任务状态修改了 执行后不管是执行成功或者是执行失败在把状态修改回来。特别注意一点,程序开始的时候把这个表所有执行状态都修改为" 没有执行" ,防止上次正在执行任务的时候程序挂了或者电脑重启,造成状态值没有被改回来而永远不会激发任务。
      

  5.   

    在内存中保存一个对象数据集合,并且for循环它,有什么可纠结的呢?大不了需要在遍历时放到 lock(){....} 管理控制区中同步一下处理过程。其实所谓的“队列、循环”不占算法的十分之一,技术点并不在这里。