Hangfire 1.7.0

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.

https://www.hangfire.io/blog/ 1.7.0 Hangfire.Core • Added – Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0. • Added – `IGlobalConfiguration.SetDataCompatibilityLevel` to enable rolling upgrades from version 1.6. • Added – `IGlobalConfiguration.UseRecommendedSerializerSettings` method for new installations. • Added – Assemblies now loaded automatically when resolving a type when using default type resolver. • Added – Custom `TaskScheduler` can now be specified in `BackgroundJobServerOptions` for workers. • Added – `IdempotentCompletionAttribute` filter to enforce strict order for continuations. • Added – `IBackgroundJobClient.ContinueJobWith` methods to replace `ContinueWith` ones in future for clarity. • Added – `JobStorage.LinearizableReads` virtual property to avoid unnecessary waits in state changer. • Added – Allow async methods to run their continuations on worker thread by disabling `TaskScheduler`. • Added – Multi-stage shutdown to wait for graceful completion before starting to abort jobs. • Added – Asynchronous checks for job cancellation, `IJobCancellationToken` can be replaced with `CancellationToken` (by @pieceofsummer). • Added – Possibility to create millions of recurring jobs without stressing the scheduler. • Added – Second-based recurring jobs are fully supported now with 6-part cron expressions. • Added – Support for custom `TimeZoneInfo` resolvers in recurring jobs for interoperability purposes. • Added – Package now explicitly targets .NET Standard 2.0, and .NET Framework 4.6 target added as well. • Added – Type roundtrip support between .NET Core and .NET Framework for most common types. • Added – Allow to specify queue names based on job arguments with `QueueAttribute` via patterns. • Added – `PerformContext.Storage` property to allow server filters to spawn connections. • Added – `GetFirstByLowestScoreFromSet` connection method overload that returns multiple items (by @cdschneider). • Added – Entry point for custom job naming strategies available for dashboard (by @pieceofsummer). • Added – `JobDisplayNameAttribute` class for displaying jobs in dashboard, available on .NET Core (by @pieceofsummer). • Added – Support for async jobs returning ValueTask<T> (by @pieceofsummer). • Added – Support for asynchronous background processes, opens the road toward async storage. • Added – Circuit breaker pattern for background processes to reduce the logging pressure. • Added – Processing server is now able to detect it was expired, and restart itself with the new id. • Added – Ability to use custom delays for automatic retries of a background job. • Added – `ThreadAbortException` and `ThreadInterruptedException` handling to keep the background process running. • Added – Support for complex Cron expressions, including the `L`, `W`, `#` characters. • Added – `JobActivator.BeginScope` method overload with the full `PerformContext` (by @jeroenvervaeke). • Added – Support for read-only view for dashboard (by @mikechamberlain). • Added – Storage property to control the job expiration time (by @rsilvanet). • Added – Decrease the size of serialized type payloads and remove version information. • Changed – Make `TaskScheduler.Default` the default scheduler for async jobs to avoid breaking changes. • Changed – Split serializer setting to Internal and User scopes to isolate them (Version_170 Switch). • Changed – Don't allow to affect internal serialization even by `JsonConvert.DefaultSettings` (Version_170 Switch). • Changed – Share the same type binder between Hangfire itself and Newtonsoft.Json (Version_170 Switch). • Changed – Use more compact representation of dates when using `SerializeDateTime` (Version_170 Switch). • Changed – Stop using special case for `DateTime` argument serialization (Version_170 Switch). • Changed – Don't serialize unused `AwaitingState.Expiration` field (Version_170 Switch). • Changed – Specify parameter type when serializing arguments to allow using `TypeNameHandling.Auto` option. • Changed – Use case sensitive search when resolving a type as by default in .NET. • Changed – Make `SucceededState` constructor public to allow state serialization. • Changed – Add `IBackgroundJobFactory.StateMachine` property (breaking change for low level API). • Changed – Replace Rickshaw with Chart.js to have beautiful charts with less headache. • Changed – `DelayedJobScheduler` is able to use the new storage method to query multiple jobs at once. • Changed – `RecurringJobScheduler` now uses index-based checks to fetch only those jobs that should be scheduled. • Fixed – Worker now logs an error, when all the state change attempts failed due to an exception. • Fixed – Don't serialize arguments multiple times when showing job details in dashboard. • Fixed – `DateTimeOffset` conversion error when it was serialized with `TypeConverter`. • Fixed – Remove duplicate of argument deserialization code for obsolete `Job` class methods. • Fixed – Decorate all the exceptions with the `SerializableAttribute`. • Fixed – `ArgumentNullException` when job class contains method with non-resolvable generic arguments. • Fixed – "Failed to initialize CoreCLR" error, by removing reference to `Microsoft.NETCore.Portable.Compatibility`. • Fixed – Possible race conditions in `RecurringJobScheduler` that may lead to job duplicates. • Fixed – Configuration inconsistency introduced in 1.6.18 leading to issues with custom `JobActivator`. • Fixed – Triggering the recurring task doesn't update its last execution time. • Fixed – Recurring job which don't have next execution (intentionally or not) don't cause exception. • Fixed – Dashboard recurring jobs sorting is random (now it's based on next execution time). • Fixed – Performance problems with huge amount of recurring jobs. • Fixed – `NextExecution` field of a recurring job has delay in value getting set. • Fixed – Dashboard graphs have improper sizing. • Fixed – Server disappears from the list, but still performing the background processing. • Fixed – Logging is too aggressive on transient errors. • Fixed – Daylight saving time transitions now handled perfectly in recurring jobs thanks to Cronos. • Fixed – Confusing Cron scheduling, when both day-of-week and day-of-month fields set. • Project – Add `DataCompatibilityRangeFact` and `DataCompatibilityRangeTheory` classes for compatibility checks. • Project – Reduce test execution time by removing unnecessary waits. Hangfire.AspNetCore • Added – Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0. • Added – An overloaded AddHangfire method with `IServiceProvider` parameter (by @ericgreenmix and @denis-ivanov). • Added – `BackgroundJobServerHostedService` class based on `IHostedService` interface. • Added – `IServiceCollection.AddHangfireServer` method to register the server during configuration. • Changed – Custom services for factory, performer and state changer interfaces will be picked up only when all of them registered. Hangfire.SqlServer • Added – Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0. • Added – `Schema 7` migration to fix the `IX_HangFire_Set_Score` index to include the `Key` column. • Added – `Schema 6` migration with less indexes, better physical layout and `bigint` support (disabled by default). • Added – Blocking fetch support for sliding expiration-based fetch to avoid excessive polling. • Added – `SqlServerStorageOptions.EnableHeavyMigrations` switch to automatically install even heavy migrations. • Added – `SqlServerStorageOptions.DisableGlobalLocks` property to avoid custom locking scheme. • Added – `SqlServerStorageOptions.UsePageLocksOnDequeue` property to use less CPU consuming fetch. • Added – Callback method to allow to open the database with impersonation (by @BjoernHund). • Added – `SqlServerStorageOptions.UseRecommendedIsolationLevel` option to set the minimum possible level. • Changed – Identity columns either converted to the `bigint` type, or entirely removed. • Changed – Clustered indexes were organized according to the access patterns of their tables. • Changed – Most of secondary indexes were either removed or made filtered. • Changed – Optimize sliding-expiration-based fetching to use even less CPU time. • Changed – Use write reordering and fine-grained locking scheme to improve parallelism. • Changed – Monitoring API doesn't check state data to see state transition time. • Changed – Allow to use zero-based poll interval when sliding invisibility timeout. • Changed – Short paths for the `CreateExpiredJob` method to avoid some round-trips. • Changed – Set `SqlParameter` types explicitly to not to duplicate query plans. • Changed – Batch support for `AddToQueue` method when default provider is used. • Changed – Check `FetchedAt` has expected value to prevent prolonging others' work. • Changed – Use more recent Dapper 1.50.7 on all platforms except .NET Framework 4.5. • Changed – Dapper package is internalized now even on .NET Core to avoid possible conflicts. • Fixed – Avoid unnecessary waits in state changer when job was already expired. • Fixed – Cannot resolve the collation conflict in `CountersAggregator`. • Fixed – Background processing stops when identity columns exceed the `Int32.MaxValue`. • Fixed – Slowdown of scheduled jobs due to the missing index on the `[Set]` table.

.NET Framework 4.5

.NET Standard 1.3

.NET Standard 2.0

Version Downloads Last updated
1.8.18 15 02/20/2025
1.8.17 20 12/10/2024
1.8.16 16 11/30/2024
1.8.15 23 10/26/2024
1.8.14 29 06/14/2024
1.8.12 30 04/09/2024
1.8.11 27 03/12/2024
1.8.10 31 02/17/2024
1.8.9 29 01/26/2024
1.8.7 29 01/05/2024
1.8.6 33 10/23/2023
1.8.5 32 08/22/2023
1.8.4 33 08/15/2023
1.8.3 30 09/05/2023
1.8.2 34 08/19/2023
1.8.1 35 08/12/2023
1.8.0 32 08/17/2023
1.8.0-rc4 31 08/16/2023
1.8.0-rc3 33 08/10/2023
1.8.0-rc2 29 08/09/2023
1.8.0-rc1 35 08/10/2023
1.8.0-beta4 33 08/06/2023
1.8.0-beta3 39 08/15/2023
1.8.0-beta2 32 08/17/2023
1.8.0-beta1 29 08/14/2023
1.7.37 27 04/09/2024
1.7.36 35 08/07/2023
1.7.35 31 08/16/2023
1.7.34 34 08/10/2023
1.7.33 35 08/16/2023
1.7.32 33 08/04/2023
1.7.31 35 07/18/2023
1.7.30 30 08/09/2023
1.7.29 31 08/11/2023
1.7.28 34 08/04/2023
1.7.27 36 08/07/2023
1.7.26 34 08/05/2023
1.7.25 29 08/06/2023
1.7.24 30 08/12/2023
1.7.23 32 08/05/2023
1.7.22 31 09/23/2023
1.7.21 29 08/07/2023
1.7.20 35 08/09/2023
1.7.19 31 08/16/2023
1.7.18 31 08/06/2023
1.7.17 31 08/11/2023
1.7.16 33 08/15/2023
1.7.15 30 08/11/2023
1.7.14 30 08/17/2023
1.7.13 31 08/04/2023
1.7.12 32 08/06/2023
1.7.11 33 08/06/2023
1.7.10 30 08/15/2023
1.7.9 33 08/15/2023
1.7.8 35 08/17/2023
1.7.7 31 08/12/2023
1.7.6 36 08/17/2023
1.7.5 33 08/18/2023
1.7.4 33 08/09/2023
1.7.3 31 08/08/2023
1.7.2 34 08/08/2023
1.7.1 29 08/07/2023
1.7.0 32 08/17/2023
1.6.30 31 08/04/2023
1.6.29 30 08/14/2023
1.6.28 31 08/08/2023
1.6.27 35 08/05/2023
1.6.26 32 08/11/2023
1.6.25 32 08/12/2023
1.6.24 32 08/10/2023
1.6.23 34 08/16/2023
1.6.22 27 08/21/2023
1.6.21 32 08/09/2023
1.6.20 31 09/24/2023
1.6.19 31 09/13/2023
1.6.18 30 08/10/2023
1.6.17 32 08/04/2023
1.6.16 30 08/09/2023
1.6.15 33 08/11/2023
1.6.14 33 08/05/2023
1.6.13 32 08/16/2023
1.6.12 33 08/18/2023
1.6.11 34 08/05/2023
1.6.10 33 08/09/2023
1.6.9 31 09/23/2023
1.6.8 38 08/04/2023
1.6.7 32 08/05/2023
1.6.6 40 08/11/2023
1.6.5 31 08/10/2023
1.6.4 31 08/04/2023
1.6.3 33 08/10/2023
1.6.2 30 08/15/2023
1.6.1 40 08/09/2023
1.6.0 32 08/09/2023
1.5.9 30 08/09/2023
1.5.8 31 08/11/2023
1.5.7 32 08/10/2023
1.5.6 35 08/06/2023
1.5.5 38 08/11/2023
1.5.4 31 08/04/2023
1.5.3 35 08/09/2023
1.5.2 33 08/15/2023
1.5.1 33 08/16/2023
1.5.0 28 08/10/2023
1.4.7 35 09/29/2023
1.4.6 43 08/04/2023
1.4.5 30 09/23/2023
1.4.4 35 09/19/2023
1.4.3 30 08/08/2023
1.4.2 37 08/07/2023
1.4.1 35 08/05/2023
1.3.4 32 08/09/2023
1.3.3 33 09/09/2023
1.3.2 31 08/15/2023
1.3.1 38 08/08/2023
1.3.0 30 08/11/2023
1.2.2 31 08/12/2023
1.2.1 32 08/05/2023
1.2.0 34 08/10/2023
1.1.1 30 08/19/2023
1.1.0 37 08/11/2023
1.0.2 29 08/23/2023
1.0.1 31 08/24/2023
1.0.0 31 08/23/2023
0.9.1 29 08/06/2023
0.9.0 32 08/06/2023
0.8.3 32 08/23/2023
0.8.2 34 08/16/2023
0.8.1 33 08/07/2023
0.8.0 31 08/15/2023
0.7.5 32 08/16/2023
0.7.4 33 08/09/2023
0.7.3 31 08/05/2023
0.7.2 33 08/11/2023
0.7.1 30 08/11/2023
0.7.0 33 08/19/2023
0.6.2 30 08/10/2023
0.6.1 33 08/05/2023
0.6.0 34 08/09/2023
0.5.2 33 08/05/2023
0.5.1 39 08/09/2023
0.5.0 37 09/06/2023