我正在使用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小时运行一次)
如何解决?
答案 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开始,我怀疑有什么东西会引发异常。尝试为错误添加事件处理程序,并查看是否有任何错误发生。