首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个注册中心FluentScheduler

多个注册中心FluentScheduler
EN

Stack Overflow用户
提问于 2014-03-24 04:18:31
回答 2查看 2K关注 0票数 2

我使用的是FluentScheduler,我有两个注册表类,

代码语言:javascript
复制
FeedRegistry
SitemapRegistry

FeedRegistry应该每15分钟运行一次,站点地图每隔6小时运行一次。

我有这样的代码:

代码语言:javascript
复制
 TaskManager.Initialize(new FeedRegistry());
 TaskManager.Initialize(new SitemapRegistry());

代码语言:javascript
复制
Schedule<FeedTask>().ToRunNow().AndEvery(15).Minutes();
Schedule<SitemapTask>().ToRunNow().AndEvery(6).Hours();

SitemapTask

代码语言:javascript
复制
    public class SitemapTask : ITask
    {
        private readonly ISitemapHelper _sitemapHelper;

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

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

FeedTask

代码语言:javascript
复制
    public class FeedTask : ITask
    {
        private readonly IFeedHelper _feedHelper;

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

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

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

代码语言:javascript
复制
Schedule<SitemapTask>().ToRunNow().AndEvery(6).Hours();
Schedule<FeedTask>().ToRunNow().AndEvery(15).Minutes();

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

怎么修?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-20 14:27:49

我也有同样的问题,我注意到我们不能初始化多个注册中心。

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

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

代码语言:javascript
复制
protected void Application_Start()
{
    TaskManager.TaskFactory = new StructureMapTaskFactory();
    TaskManager.Initialize(new RegistryMultipleTasks());
}
代码语言:javascript
复制
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:我知道这是一条老生常谈,但我写这篇文章的目的是为了帮助遇到同样问题的人。

票数 7
EN

Stack Overflow用户

发布于 2014-03-24 22:30:09

我对FluentScheduler并不太熟悉,但是仅仅从此页的阅读中,我就会怀疑有什么东西在抛出一个异常。尝试为错误添加一个事件处理程序,并查看是否发生了错误。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22601006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档