These versions contain important fixes for the whole processing pipeline, including fire-and-forget, delayed and recurring jobs in the presence of custom extension filters that can throw exceptions. Also a built-in support for reliable shutdown detection of ASP.NET applications was added to the Hangfire.Core package to prevent running old code base when the new one is already deployed. And recurring jobs page in 1.7.11 now displays all the exceptions that prevent a particular recurring job from being scheduled.

Exceptions thrown from extension filters now properly handled without stalling the processing pipeline, and custom filters now being disabled when moving a job to the Failed state when all the previous state change attempts failed. This was a regression appeared in version 1.6.20 after resolving another issue with state changes, so upgrades for both 1.6.X and 1.7.X are available.

I’ve also decided to copy a reliable shutdown detection of ASP.NET applications from the Hangfire.AspNet package, to ensure that every application that use Hangfire in ASP.NET uses this feature. Long-running requests, overlapped recycle feature that’s turned on by default and strange behavior that sometimes doesn’t cause AppDomain unload after new deployments can leave old application instance running, resulting in subtle errors sometimes really hard to understand.


  • Added – Display recurring job exceptions directly in the Dashboard UI.
  • Added – Add built-in support for reliable shutdown detection of ASP.NET apps.
  • Changed – Internal feature to perform state changes without calling any filters.
  • Changed – Decrease the number of retry attempts for recurring jobs to 5.
  • Changed – Unify exception handling in recurring job scheduler.
  • Fixed – Let workers to ignore any state change filters when all previous attempts to call them failed.
  • Fixed – Don’t let RecurringJobScheduler to stall the pipeline when extension filters throw an exception.
  • Fixed – Don’t let DelayedJobScheduler to stall the pipeline when state filters throw an exception.
  • FixedJobLoadException when new methods deployed, caused by overlapped recycles in ASP.NET applications.
  • Fixed – Configuration changes aren’t taken into account, caused by overlapped recycles in ASP.NET.
  • Fixed – Zombie servers shown on the “Servers” page that aren’t stopped automatically unless app pool is recycled.
  • Fixed – Pass the whole exception to the Error field of a recurring job.
  • Fixed – Re-schedule recurring jobs with unsupported versions, instead of stopping the pipeline.
  • Fixed – Don’t stumble over non-existing recurring jobs in a scheduler.
  • Fixed – Add another check before removing non-existing jobs from delayed jobs to avoid race conditions.
  • Fixed – Avoid throwing NullReferenceException instead of InvalidOperationException when deserializing a job.
  • Fixed – Don’t transform queue names to upper case in the Dashboard UI.

Subscribe to monthly updates

Subscribe to receive monthly blog updates. Very low traffic, you are able to unsubscribe at any time.