/// <summary> /// /// </summary> /// <param name="applicationEnder"></param> /// <param name="logger"></param> /// <param name="serviceProvider"></param> /// <param name="periodicTaskFailureMode"></param> /// <param name="timeBetweenTasks"></param> public PeriodicTaskRunnerBackgroundService( IApplicationEnder applicationEnder, ILogger <PeriodicTaskRunnerBackgroundService <TPeriodicTask> > logger, IServiceProvider serviceProvider, PeriodicTaskFailureMode periodicTaskFailureMode, TimeSpan timeBetweenTasks) : base(applicationEnder) { this.logger = logger; this.serviceProvider = serviceProvider; this.periodicTaskFailureMode = periodicTaskFailureMode; this.timeBetweenTasks = timeBetweenTasks; }
/// <summary> /// Add a periodic task. /// The task is recreated with a new scope for each invocation. /// </summary> /// <param name="services">The ServiceCollection</param> /// <param name="failureMode">Determines how the service behaves when a task fails.</param> /// <param name="timeBetweenTasks">How long after the completion of the previous task, should the next task run?</param> /// <typeparam name="TPeriodicTask">The periodic task to run</typeparam> public static void AddPeriodicTask <TPeriodicTask>(this IServiceCollection services, PeriodicTaskFailureMode failureMode, TimeSpan timeBetweenTasks) where TPeriodicTask : class, IPeriodicTask { services.AddTransient <TPeriodicTask>(); services.AddHostedService <PeriodicTaskRunnerBackgroundService <TPeriodicTask> >((services) => { return(new PeriodicTaskRunnerBackgroundService <TPeriodicTask>( applicationEnder: services.GetRequiredService <IApplicationEnder>(), logger: services.GetRequiredService <ILogger <PeriodicTaskRunnerBackgroundService <TPeriodicTask> > >(), serviceProvider: services.GetRequiredService <IServiceProvider>(), periodicTaskFailureMode: failureMode, timeBetweenTasks: timeBetweenTasks )); }); }