多个注册表FluentScheduler

时间:2014-03-24 04:18:32

标签: autofac scheduler fluentscheduler

我正在使用FluentScheduler,并且遇到了我有2个注册表类的问题,

FeedRegistry
SitemapRegistry

FeedRegistry应该每15分钟运行一次,sitemapregistry运行6个小时。

我有这段代码:

 TaskManager.Initialize(new FeedRegistry());
 TaskManager.Initialize(new SitemapRegistry());

Schedule<FeedTask>().ToRunNow().AndEvery(15).Minutes();
Schedule<SitemapTask>().ToRunNow().AndEvery(6).Hours();

SitemapTask

    public class SitemapTask : ITask
    {
        private readonly ISitemapHelper _sitemapHelper;

        public SitemapTask(ISitemapHelper  sitemapHelper)
        {
            _sitemapHelper = sitemapHelper;
        }

        public void Execute()
        {
                _sitemapHelper.Process(false);
        }
    }

FeedTask

    public class FeedTask : ITask
    {
        private readonly IFeedHelper _feedHelper;

        public FeedTask(IFeedHelper feedHelper)
        {
            _feedHelper = feedHelper;
        }

        public void Execute()
        {
            _feedHelper.Process(false);
        }
    }

我正在使用Autofac,并且依赖项已注册为“InstancePerLifetimeScope”。问题是FeedTask只在应用程序开始时运行一次,但在15分钟后不再运行。但是,如果我反转初始化,如

Schedule<SitemapTask>().ToRunNow().AndEvery(6).Hours();
Schedule<FeedTask>().ToRunNow().AndEvery(15).Minutes();

它将每15分钟运行一次(我假设站点地图不会每6小时运行一次)

如何解决?

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,我注意到我们无法初始化多个注册表。

但是,我们可以初始化一个启动多个计划的注册表。

以下是我所做的一个例子。

protected void Application_Start()
{
    TaskManager.TaskFactory = new StructureMapTaskFactory();
    TaskManager.Initialize(new RegistryMultipleTasks());
}

public class RegistryMultipleTasks : Registry
{
    public RegistryMultipleTasks()
    {
        FeedRegistry.AddSchedule(this);
        SitemapRegistry.AddSchedule(this);
    }
}

public class FeedRegistry
{
    public static void AddSchedule(Registry registry = null)
    {
        registry.Schedule(() => FeedTask()).ToRunNow().AndEvery(15).Minutes();
    }

    private static void FeedTask()
    {
        // TODO
    }
}

这对我有用。

PS:我知道这是一个老线程,但我写这篇文章的目的是帮助任何人解决同样的问题。

答案 1 :(得分:0)

我对FluentScheduler并不太熟悉,但只是从阅读this page开始,我怀疑有什么东西会引发异常。尝试为错误添加事件处理程序,并查看是否有任何错误发生。