Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions AspNetCoreTestProject/CriticalBackgroundServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ namespace AspNetCoreTestProject
using System.Threading;
using System.Threading.Tasks;
using BetterHostedServices;
using Microsoft.Extensions.Logging;

public class ImmediatelyCrashingCriticalBackgroundService : CriticalBackgroundService
{
protected override Task ExecuteAsync(CancellationToken stoppingToken) =>
throw new Exception("Crash right away");

public ImmediatelyCrashingCriticalBackgroundService(IApplicationEnder applicationEnder) : base(applicationEnder)
public ImmediatelyCrashingCriticalBackgroundService(IApplicationEnder applicationEnder, ILogger<ImmediatelyCrashingCriticalBackgroundService> criticalLogger) : base(applicationEnder, criticalLogger)
{
}
}
Expand All @@ -23,7 +24,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
throw new Exception("Crash after yielding");
}

public YieldingAndThenCrashingCriticalBackgroundService(IApplicationEnder applicationEnder) : base(applicationEnder)
public YieldingAndThenCrashingCriticalBackgroundService(IApplicationEnder applicationEnder, ILogger<ImmediatelyCrashingCriticalBackgroundService> criticalLogger) : base(applicationEnder, criticalLogger)
{
}
}
Expand All @@ -38,7 +39,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
this.Activated = true;
}

public StubCriticalBackgroundService(IApplicationEnder applicationEnder) : base(applicationEnder)
public StubCriticalBackgroundService(IApplicationEnder applicationEnder, ILogger<ImmediatelyCrashingCriticalBackgroundService> criticalLogger) : base(applicationEnder, criticalLogger)
{
}
}
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public class YieldingAndThenCrashingBackgroundService: CriticalBackgroundService
throw new Exception("Oh no something really bad happened");
}

public YieldingAndThenCrashingBackgroundService(IApplicationEnder applicationEnder) : base(applicationEnder) { }
public YieldingAndThenCrashingBackgroundService(IApplicationEnder applicationEnder, ILogger<YieldingAndThenCrashingBackgroundService> logger) : base(applicationEnder, logger) { }
}
```
And then you can use it like any other IHostedService. E.g. inside `ConfigureServices` you add the following:
Expand Down Expand Up @@ -76,7 +76,7 @@ public class YieldingAndThenCrashingCriticalBackgroundService : CriticalBackgrou
this._applicationEnder.ShutDownApplication(); // or simply call base.OnError
}

public YieldingAndThenCrashingCriticalBackgroundService(IApplicationEnder applicationEnder) : base(applicationEnder)
public YieldingAndThenCrashingCriticalBackgroundService(IApplicationEnder applicationEnder, ILogger<YieldingAndThenCrashingCriticalBackgroundService> logger) : base(applicationEnder, logger)
{
}
}
Expand Down
8 changes: 6 additions & 2 deletions src/CriticalBackgroundService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace BetterHostedServices
{
Expand All @@ -20,12 +21,14 @@ public abstract class CriticalBackgroundService : IHostedService, IDisposable
/// Use this if you want to shutdown the application.
/// </summary>
protected IApplicationEnder _applicationEnder;
private readonly ILogger<CriticalBackgroundService> _logger;

/// <summary>
/// </summary>
protected CriticalBackgroundService(IApplicationEnder applicationEnder)
protected CriticalBackgroundService(IApplicationEnder applicationEnder, ILogger<CriticalBackgroundService> logger)
{
this._applicationEnder = applicationEnder;
this._logger = logger;
}

/// <summary>
Expand All @@ -45,7 +48,8 @@ protected CriticalBackgroundService(IApplicationEnder applicationEnder)
protected virtual void OnError(Exception exceptionFromExecuteAsync)
{
Console.Error.WriteLine($"Error happened while executing CriticalBackgroundTask {this.GetType().FullName}. Shutting down.");
Console.Error.WriteLine(exceptionFromExecuteAsync.ToString());
this._logger.LogError(exceptionFromExecuteAsync, $"Error happened while executing CriticalBackgroundTask {this.GetType().FullName}. Shutting down.");

this._applicationEnder.ShutDownApplication();
}

Expand Down
5 changes: 4 additions & 1 deletion src/IServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,12 @@ public static void AddPeriodicTask<TPeriodicTask>(this IServiceCollection servic

services.AddHostedService<PeriodicTaskRunnerBackgroundService<TPeriodicTask>>((services) =>
{
var logger = services.GetRequiredService<ILogger<PeriodicTaskRunnerBackgroundService<TPeriodicTask>>>();

return new PeriodicTaskRunnerBackgroundService<TPeriodicTask>(
applicationEnder: services.GetRequiredService<IApplicationEnder>(),
logger: services.GetRequiredService<ILogger<PeriodicTaskRunnerBackgroundService<TPeriodicTask>>>(),
logger: logger,
criticalLogger: logger,
serviceProvider: services.GetRequiredService<IServiceProvider>(),
periodicTaskFailureMode: failureMode,
timeBetweenTasks: timeBetweenTasks
Expand Down
4 changes: 3 additions & 1 deletion src/PeriodicTaskRunnerBackgroundService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,17 @@ public class PeriodicTaskRunnerBackgroundService<TPeriodicTask> : CriticalBackgr
/// </summary>
/// <param name="applicationEnder"></param>
/// <param name="logger"></param>
/// <param name="criticalLogger"></param>
/// <param name="serviceProvider"></param>
/// <param name="periodicTaskFailureMode"></param>
/// <param name="timeBetweenTasks"></param>
public PeriodicTaskRunnerBackgroundService(
IApplicationEnder applicationEnder,
ILogger<PeriodicTaskRunnerBackgroundService<TPeriodicTask>> logger,
ILogger<CriticalBackgroundService> criticalLogger,
IServiceProvider serviceProvider,
PeriodicTaskFailureMode periodicTaskFailureMode,
TimeSpan timeBetweenTasks) : base(applicationEnder)
TimeSpan timeBetweenTasks) : base(applicationEnder, criticalLogger)
{
this.logger = logger;
this.serviceProvider = serviceProvider;
Expand Down
7 changes: 4 additions & 3 deletions tests/HostedServices/CriticalBackgroundServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ namespace BetterHostedServices.Test.HostedServices
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;


public class ImmediatelyCrashingCriticalBackgroundService: CriticalBackgroundService
public class ImmediatelyCrashingCriticalBackgroundService: CriticalBackgroundService
{
protected override Task ExecuteAsync(CancellationToken stoppingToken) => throw new Exception("Crash right away");

public ImmediatelyCrashingCriticalBackgroundService(IApplicationEnder lifeTime) : base(lifeTime)
public ImmediatelyCrashingCriticalBackgroundService(IApplicationEnder lifeTime, ILogger<ImmediatelyCrashingCriticalBackgroundService> criticalLogger) : base(lifeTime, criticalLogger)
{
}
}
Expand All @@ -23,7 +24,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
throw new Exception("Crash after yielding");
}

public YieldingAndThenCrashingCriticalBackgroundService(IApplicationEnder lifeTime) : base(lifeTime)
public YieldingAndThenCrashingCriticalBackgroundService(IApplicationEnder lifeTime, ILogger<ImmediatelyCrashingCriticalBackgroundService> criticalLogger) : base(lifeTime, criticalLogger)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ namespace BetterHostedServices.Test.IntegrationUtils
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;


public interface ISomeBackgroundService
Expand All @@ -12,7 +13,7 @@ public interface ISomeBackgroundService

public class SomeBackgroundService : CriticalBackgroundService, ISomeBackgroundService
{
public SomeBackgroundService(IApplicationEnder applicationEnder) : base(applicationEnder)
public SomeBackgroundService(IApplicationEnder applicationEnder, ILogger<CriticalBackgroundService> logger) : base(applicationEnder, logger)
{
}

Expand Down