Hangfire 1.8.7

An easy and reliable way to perform fire-and-forget, delayed and recurring, long-running, short-running, CPU or I/O intensive tasks inside ASP.NET applications. No Windows Service / Task Scheduler required. Even ASP.NET is not required. Backed by Redis, SQL Server, SQL Azure or MSMQ. This is a .NET alternative to Sidekiq, Resque and Celery. https://www.hangfire.io/

No packages depend on Hangfire.

Release notes are available in our blog https://www.hangfire.io/blog/ Please see https://docs.hangfire.io/en/latest/upgrade-guides/upgrading-to-hangfire-1.8.html to learn how to upgrade. 1.8.7 Hangfire.Core • Added – Allow using macro expressions like `@hourly` for recurring jobs (by @MuhamedAbdalla). • Added – Show storage time in page footer when supported by storage implementation. • Added – Show duration and latency columns separately on the Succeeded Jobs page when supported. • Added – Show the exception column on the Deleted Jobs page when available and supported by storage. • Changed – Reduce package size by stripping unnecessary locales in Moment.js. • Changed – Bump Microsoft.Owin package to version 4.2.2. • Changed – Log a warning message when a server listens to unsupported queue names. • Changed – Use storage time, if available, to show delay warnings in the Dashboard UI. • Fixed – Proper rendering of generic arguments on the Job Details page (by @olivermue). • Fixed – Language inconsistency in the Dashboard UI related to date/time description. • Fixed – Big stack traces take too long time to be formatted. • Fixed – Don't throw `NullReferenceException` from the Scheduled Jobs page when there's a job with missing data. • Fixed – Don't throw `NullReferenceException` from the Processing Jobs page when there's a job with missing data. • Fixed – CSS for Enqueued and Deleted state cards in dark theme. • Fixed – Log errors instead of throwing an exception when a particular table can't be cleaned. • Fixed – Avoid logging fatal exceptions when stopping a faulting background process. • Fixed – Don't display checkboxes in the Dashboard UI when job details can not be fetched. • Fixed – Scrollbars in WebKit-based browsers are now dark in dark mode. • Project – Disable tests for `netcoreapp1.0` and `netcoreapp2.1` targets since they aren't supported in AppVeyor. • Project – Add a `net6.0` target for unit tests instead of the removed ones. • Project – Modernise projects and build environments to use the newest features. Hangfire.SqlServer • Changed – Avoid throwing an exception when a connection string has duplicate property names. • Project – Disable tests for `netcoreapp1.0` and `netcoreapp2.1` targets since they aren't supported in AppVeyor. • Project – Add a `net6.0` target for unit tests instead of the removed ones. • Project – Modernise projects and build environments to use the newest features. 1.8.6 • Changed – Update jQuery library in Dashboard UI to version 3.7.1. • Changed – Mark all types in Hangfire.Annotations with `EditorBrowsableAttribute(Never)`. • Changed – Change state card colors for the Awaiting state to match the Scheduled state. • Fixed – Exception when deserializing an instance of the `AutomaticRetryAttribute` class from JSON. • Fixed – Add serialization-related constructors for all the exception classes. • Fixed – Use invariant culture or ordinal comparisons for internal strings. • Fixed – Use invariant culture when formatting key names for metrics. • Fixed – Use `CurrentCulture` instead of `CurrentUICulture` when displaying time. • Project – Enable running static analysis by Coverity Scan weekly. • Project – Enable mandatory static analysis by the Microsoft.CodeAnalysis.NetAnalyzers package. • Project – Change MSBuild path when building using newer .NET SDKs for Razor views. Hangfire.SqlServer • Fixed – Exception in Dashboard UI when schema version is not present in a database. • Fixed – `DbCommand` resource leak when releasing a lock detected by static analysis. • Fixed – Don't add SQL Server-related metrics multiple times in Dashboard UI. Hangfire.NetCore • Fixed – Include assembly information to the Hangfire.NetCore assembly. 1.8.5 Hangfire.Core • Added – Possibility to inform a `FaviconPath` on `DashboardOptions` (by @cezar-pimentel). • Fixed – Inability to restore a disabled recurring job, regression in version 1.8.3. • Fixed – Make it possible to serialize the `AutomaticRetryAttribute` filter to JSON. Hangfire.SqlServer • Fixed – "Query processor could not produce a query plan" when removing expired counters in `Schema 5`. 1.8.4 Hangfire.Core • Added – Pass server id from a worker to the `PerformContext.ServerId` property available in filters. • Fixed – Send heartbeats until full background processing server shutdown. Hangfire.NetCore • Changed – Send the stop signal earlier in the shutdown pipeline when hosting in .NET Core 3.1 or higher. • Changed – Set processing server to null in hosted service to avoid `ObjectDisposedException`. • Fixed – Other `IHostedService` implementations can block Hangfire server from being stopped. 1.8.3 Hangfire.Core • Changed – Allow to configure `MaxLinesInStackTrace` for a particular `FailedState` instance. • Fixed – Remove job id from schedule when it's not in the Scheduled state for some reason. • Fixed – Missing invocations of recurring jobs when the new "Ignorable" option is used. • Fixed – Make `DisableConcurrentExecutionAttribute` and `LatencyTimeoutAttribute` serializable. 1.8.2 Hangfire.Core • Changed – Disable transactional job creation feature appeared in 1.8.0. • Fixed – "Can not start continuation XXX" error when storage supports transactional job creation. Hangfire.SqlServer • Fixed – `InvalidOperationException` with new dashboard metrics when a database has multiple data/log files. 1.8.1 Hangfire.Core • Added – `MisfireHandlingMode.Ignorable` to avoid scheduling recurring jobs on missed schedules. • Added – Support disabling dark mode via the `DashboardOptions.DarkModeEnabled` property. • Changed – Remove the 1-hour limitation for the `WithJobExpirationTimeout` configuration method. • Fixed – Add missing `UseDefaultCulture` configuration method overloads. • Fixed – Add missing `UseDashboardStylesheet` and `UseJobDetailsRenderer` configuration methods. • Fixed – Give even more space for identifiers on the Recurring Jobs page. • Fixed – `state-card-state-active` color is not very dark (by @coolhome). • Fixed – Slightly change chart proportions to fit 4K in Dashboard UI. Hangfire.SqlServer • Fixed – Blocked workers regression since 1.7.33 when using multiple servers inside a process. • Fixed – Target schema version is less than the current schema version error. • Fixed – Implement database metrics without the need for additional permissions. • Fixed – Use the `forceseek` table hint whenever possible to avoid performance drops. Hangfire.NetCore • Fixed – Add `net461` target for Hangfire.NetCore package to avoid missing method exceptions. 1.8.0 Hangfire.Core • Breaking – Dropped the `NET45` platform target in favor of the `NET451` target to support Visual Studio 2022. • Added – Introduce the `Job.Queue` property, so jobs now can have their own queue specified. • Added – Method overloads to create background jobs directly with a custom default queue. • Added – Method overloads to create recurring jobs directly with a custom default queue. • Added – `IBackgroundJobClient.Create` method overloads with the new `queue` parameter. • Added – Allow to filter exception types in `AutomaticRetryAttribute` by using the new `OnlyOn` property. • Added – `DeletedState` now has the persisted `Exception` property populated after a failure. • Added – `JobContinuationOptions.OnlyOnDeletedState` to create continuations after a failure. • Added – `Exception` job parameter is passed to continuation when `UseResultsInContinuations` method is used. • Added – `FromExceptionAttribute` to deal with an antecedent exception in a background job continuation. • Added – Make it possible to specify multiple `JobContinuationOptions` values for a continuation. • Added – `BackgroundJobServerOptions.IsLightweightServer` option to run a server with no storage processes. • Added – Ability to use custom formattable resource identifiers for the `DisableConcurrentExecution` filter. • Added – Pass `ServerId` to `FailedState` instances to simplify the debugging on different servers. • Added – Allow to pass job parameters when creating a job (by @brian-knoll-micronetonline). • Added – `MisfireHandlingMode.Strict` to create a job for each missed recurring job occurrence. • Added – Support for default culture and UI culture via the `UseDefaultCulture` configuration method. • Added – Introduce the `captureDefault` parameter in the `CaptureCulture` filter. • Added – `IGlobalConfiguration.UseFilterProvider` extension method to unify the configuration. • Added – Built-in `Remove` method for `JobFilterCollection` to remove global filters based on their type. • Added – `CompatibilityLevel.Version_180` flag to avoid storing culture parameters when they are the same as the default ones. • Changed – Create job atomically when `Transaction.CreateJob` feature is supported by the storage. • Changed – Query time from storage in recurring and delayed schedulers when supported by storage. • Changed – Move job to the `DeletedState` instead of `SucceededState` when its invocation was canceled by a filter. • Changed – Speedup delayed jobs when a custom default queue is specified by avoiding extra state transition. • Changed – Use UI culture from `CurrentCulture` parameter when `CurrentUICulture` one is missing. • Changed – Increase the default value for the `BackgroundJobServerOptions.StopTimeout` to 500 ms. • Deprecated – `AddOrUpdate` overloads with optional params defined in the `RecurringJobManagerExtensions` class. • Deprecated – `AddOrUpdate` overloads with optional parameters defined in the `RecurringJob` class. • Deprecated – `AddOrUpdate` method overloads with no `recurringJobId` parameter. • Deprecated – `RecurringJobOptions.QueueName` property, new methods should be used instead. • Breaking – Dropped `NET45` platform target in favor of `NET451` target to support Visual Studio 2022. Dashboard UI • Added – Dark mode support for Dashboard UI depending on the system settings (by @danillewin). • Added – Dashboard UI now has a full-width layout to display more data (by @danillewin). • Added – Allow to add custom JavaScript and CSS files to the Dashboard UI via the `DashboardRoutes` class. • Added – `DefaultRecordsPerPage` property on the `DashboardOptions` class (by @PaulARoy). • Added – `IGlobalConfiguration.UseJobDetailsRenderer` method for custom renderers for the Job Details page. • Added – Display deleted jobs in the Realtime and History graphs when supported by storage. • Added – `IGlobalConfiguration.UseDashboardMetrics` extension method to pass multiple metrics at once. • Added – State renderer for the `DeletedState` to display its new exception property. • Added – Support for new `MonitoringApi` methods for the Awaiting Jobs page. • Changed – Make it possible to display methods of non-loaded jobs in the Dashboard UI when supported by storage. • Changed – Improved display of realtime chart with more accents on failed and deleted jobs. • Changed – Don't display the queue name in the state transition list when it's the `default` one. • Changed – Display scheduled job count when the enqueued count is zero on the main metric. Extensibility • Added – `Factory`, `StateMachine`, and `Performer` properties to context classes to avoid injecting services. • Added – Allow to pass custom data to `ApplyStateContext` and `ElectStateContext` instances. • Added – Preserve custom data dictionary between the entire filter chain. • Added – Allow to pass a transaction to background job state changer when new methods are implemented. • Changed – Ignore some members when serializing a `JobFilterAttribute` instance to decrease the payload size. Storage • Added – Virtual `JobStorage.GetReadOnlyConnection` method intended to return `JobStorageConnection` for replicas. • Added – Virtual `JobStorage.HasFeature` method for querying optional features. • Added – The `JobStorageFeatures` class to avoid using magic strings in storage features. • Added – Optional `GetSetCount`, `GetSetContains`, and `GetUtcDateTime` methods for the `JobStorageConnection` class. • Added – Optional `AcquireDistributedLock` and `RemoveFromQueue` methods for the `JobStorageTransaction` class. • Added – Optional `CreateJob` and `SetJobParameter` methods for the `JobStorageTransaction` class. • Added – Optional `ParametersSnapshot` property for `BackgroundJob` and `JobData` classes to minimize roundtrips in the future. • Added – Support for transactional acknowledgment using a new storage method for better handling some data loss scenarios. • Added – Fetch `Retries` and `Awaiting` metrics in `StatisticsDto` properties when supported by storage. • Added – The `JobStorageMonitor` class with more available methods for the new features. • Changed – Allow to query job parameters without additional roundtrip when supported by storage. • Changed – Expose state data dictionaries in list DTOs when supported by storage. • Changed – Rely on storage indexing with the `Monitoring.AwaitingJobs` feature. Internals • Added – `IBackgroundProcess.UseBackgroundPool` now allows to pass thread configuration logic. • Added – `BackgroundJobServerOptions.WorkerThreadConfigurationAction` option for custom thread configuration. • Changed – Allow changing queues on the fly with custom worker configuration. • Changed – Avoid storage roundtrip to query job data in worker, take data from previous state change. • Changed – `FromParameterAttribute`-based logic now always overwrites arguments, even with non-null values. • Changed – Turn the `JobContinuationOptions` enum into flags while still possible. • Changed – Re-implement `TaskExtensions.WaitOneAsync` only with the `RegisterWaitForSingleObject` method. • Changed – `ServerHeartbeatProcess` now uses `ThreadPriority.AboveNormal` to prioritize heartbeats. Hangfire.NetCore • Added – `IApplicationBuilder.UseHangfireServer` that accepts custom factory for `IBackgroundProcessingServer`. • Added – `net451` and `netstandard1.3` targets for the package. • Changed – Use `netstandard2.1` target instead of `netcoreapp3.0` for the package. • Changed – Send the "stop" signal earlier when the host supports .NET Standard 2.1. • Changed – Don't throw `ObjectDisposedException` when hosted service is disposed twice. Hangfire.AspNetCore • Breaking – Make the package to be dependent on Hangfire.NetCore and use the same types. • Added – `IApplicationBuilder.UseHangfireServer` that accepts custom factory for `IBackgroundProcessingServer`. Hangfire.SqlServer • Breaking – Prioritise Microsoft.Data.SqlClient package over System.Data.SqlClient one. • Breaking – Dropped the `NET45` platform target in favor of the `NET451` target to support Visual Studio 2022. • Added – `Schema 8` migration with fixed `JobQueue.Id` column to use the `bigint` type. • Added – `Schema 9` migration that creates an index for the `State.CreatedAt` column. • Added – Automatic client package detection based on available types, preferring `System.Data.SqlClient` (by @0xced). • Added – `SqlServerStorageOptions.DbProviderFactory` option to use a custom provider factory. • Added – Clean up of old state entries of a non-finished job when `InactiveStateExpirationTimeout` is set. • Added – `TryAutoDetectSchemaDependentOptions` option to automatically enable options based on the schema. • Added – Optional experimental transactional acknowledge for SQL Server (`UseTransactionalAcknowledge` option). • Added – Implement the `Connection.GetUtcDateTime` feature to make work the new changes in schedulers. • Added – `SqlServerStorage.SchemaVersion` metric for Dashboard UI. • Added – `DefaultQueueProvider` option to specify a custom default queue provider. • Changed – Remove dependency on System.Data.SqlClient for Hangfire.SqlServer (by @0xced). • Changed – Set default value for the `QueuePollInterval` option to `TimeSpan.Zero`. • Changed – Polling delay when `QueuePollInterval` is set to zero now defaults to 200 ms. • Changed – Sliding invisibility timeout-based fetching method is now used by default with a 5-minute timeout. • Changed – Use command batching by default with a 5-minute maximum timeout. • Changed – Enable the `UseRecommendedIsolationLevel` option by default. • Changed – `GetJobData` now populates the `JobData.ParametersSnapshot` property to avoid additional roundtrips. • Changed – Display scheduled and processing jobs in ascending order in Dashboard UI. • Changed – Implement the `Transaction.AcquireDistributedLock` feature. • Changed – Implement the `GetSetCount.Limited feature`. • Changed – Implement the `GetSetContains feature`. • Changed – Bump the internal version of Dapper to 2.0.123. • Changed – Enable common metrics for SQL Server storage to be shown by default. • Changed – Enable the `Monitoring.AwaitingJobs` feature for SQL storage. • Deprecated – `UsePageLocksOnDequeue` option is now obsolete and doesn't affect anything. Hangfire.SqlServer.Msmq • Breaking – Dropped the `NET45` platform target in favor of the `NET451` target to support Visual Studio 2022.

.NET Framework 4.5.1

.NET Standard 1.3

.NET Standard 2.0

Version Downloads Last updated
1.8.14 0 11.06.2024
1.8.12 0 03.04.2024
1.8.11 1 02.05.2024
1.8.10 0 12.02.2024
1.8.9 0 24.01.2024
1.8.7 1 02.09.2024
1.8.6 0 18.10.2023
1.8.5 0 11.08.2023
1.8.4 0 27.07.2023
1.8.3 0 27.06.2023
1.8.2 0 26.05.2023
1.8.1 0 18.05.2023
1.8.0 0 28.04.2023
1.7.37 0 08.04.2024
1.7.36 0 29.06.2023
1.7.35 0 18.05.2023
1.7.34 0 30.03.2023
1.7.33 0 31.01.2023
1.7.32 0 21.11.2022
1.7.31 0 19.08.2022
1.7.30 0 10.06.2022
1.7.29 0 23.05.2022
1.7.28 0 18.12.2021
1.7.27 0 03.11.2021
1.7.26 0 27.10.2021
1.7.25 0 30.08.2021
1.7.24 0 28.06.2021
1.7.23 0 28.05.2021
1.7.22 0 13.04.2021
1.7.21 0 12.04.2021
1.7.20 0 19.03.2021
1.7.19 0 15.01.2021
1.7.18 0 20.11.2020
1.7.17 0 20.10.2020
1.7.16 0 14.10.2020
1.7.15 0 08.10.2020
1.7.14 0 24.09.2020
1.7.13 0 15.09.2020
1.7.12 0 24.07.2020
1.7.11 0 15.04.2020
1.7.10 0 02.04.2020
1.7.9 0 20.01.2020
1.7.8 0 05.12.2019
1.7.7 0 22.10.2019
1.7.6 0 05.08.2019
1.7.5 0 18.07.2019
1.7.4 0 28.06.2019
1.7.3 0 23.05.2019
1.7.2 0 29.04.2019
1.7.1 0 16.04.2019
1.7.0 0 29.03.2019
1.6.30 0 29.04.2021
1.6.29 0 15.04.2020
1.6.28 0 14.01.2020
1.6.27 0 27.06.2019
1.6.26 0 23.05.2019
1.6.25 0 09.04.2019
1.6.24 0 27.03.2019
1.6.23 0 13.03.2019
1.6.22 0 25.01.2019
1.6.21 0 01.11.2018
1.6.20 0 31.07.2018
1.6.19 0 06.04.2018
1.6.18 0 05.04.2018
1.6.17 0 19.09.2017
1.6.16 0 02.09.2017
1.6.15 0 08.08.2017
1.6.14 0 16.06.2017
1.6.13 0 07.06.2017
1.6.12 0 22.03.2017
1.6.11 0 14.03.2017
1.6.10 0 13.03.2017
1.6.9 0 02.03.2017
1.6.8 0 21.12.2016
1.6.7 0 25.11.2016
1.6.6 0 13.10.2016
1.6.5 0 24.09.2016
1.6.4 0 30.08.2016
1.6.3 0 19.08.2016
1.6.2 0 05.08.2016
1.6.1 0 27.07.2016
1.6.0 0 15.07.2016
1.5.9 0 11.07.2016
1.5.8 0 17.06.2016
1.5.7 0 30.05.2016
1.5.6 0 22.04.2016
1.5.5 0 14.04.2016
1.5.4 0 22.03.2016
1.5.3 0 06.11.2015
1.5.2 0 15.10.2015
1.5.1 0 14.10.2015
1.5.0 0 01.10.2015
1.4.7 0 01.10.2015
1.4.6 0 29.08.2015
1.4.5 0 24.07.2015
1.4.4 0 23.07.2015
1.4.3 0 27.05.2015
1.4.2 0 06.05.2015
1.4.1 0 14.04.2015
1.3.4 0 04.02.2015
1.3.3 0 28.01.2015
1.3.2 0 27.01.2015
1.3.1 0 13.01.2015
1.3.0 0 10.12.2014
1.2.2 0 24.11.2014
1.2.1 0 22.11.2014
1.2.0 0 17.11.2014
1.1.1 0 05.09.2014
1.1.0 0 03.09.2014
1.0.2 0 01.07.2014
1.0.1 0 30.06.2014
1.0.0 0 30.06.2014
0.9.1 0 12.06.2014
0.9.0 0 07.06.2014
0.8.3 0 23.05.2014
0.8.2 0 21.05.2014
0.8.1 0 17.05.2014
0.8.0 0 02.05.2014
0.7.5 0 10.04.2014
0.7.4 0 07.04.2014
0.7.3 0 04.04.2014
0.7.2 0 04.04.2014
0.7.1 0 01.04.2014
0.7.0 0 22.03.2014
0.6.2 0 28.01.2014
0.6.1 0 27.01.2014
0.6.0 0 27.01.2014
0.5.2 0 19.11.2013
0.5.1 0 12.11.2013
0.5.0 0 10.11.2013