/// <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;
 }
Esempio n. 2
0
        /// <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
                           ));
            });
        }