2

我正在使用 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();

站点地图任务

    public class SitemapTask : ITask
    {
        private readonly ISitemapHelper _sitemapHelper;

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

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

饲料任务

    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 小时运行一次)

怎么修?

4

2 回答 2

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:我知道这是一个旧线程,但我写这篇文章的目的是帮助遇到同样问题的任何人。

于 2015-01-20T14:27:49.957 回答
0

我对 FluentScheduler 不太熟悉,但仅通过阅读此页面,我怀疑某些东西正在引发异常。尝试为错误添加事件处理程序并查看是否发生任何错误。

于 2014-03-24T22:30:09.640 回答