HangFire 1.7.4

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/

There is a newer version of this package available.
See the version list below for details.
Install-Package HangFire -Version 1.7.4
dotnet add package HangFire --version 1.7.4
<PackageReference Include="HangFire" Version="1.7.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add HangFire --version 1.7.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Release Notes

https://www.hangfire.io/blog/

Please see https://docs.hangfire.io/en/latest/upgrade-guides/upgrading-to-hangfire-1.7.html to learn how to upgrade from 1.6.X.

1.7.4

Hangfire.Core

• Added – `BackgroundJobClient.RetryAttempts` property to make job creation resilient to transient exceptions.
• Added – Dashboard localization support in `pt-BR` (by @candidodmv).
• Changed – Protect background dispatchers from moving from stopped state to non-stopped one.
• Changed – Unify `WaitOne` and `WaitOneAsync` methods with timeout and cancellation token for `WaitHandle` class.
• Fixed – Don't hide an original fatal exception occurred in dispatchers in some cases.
• Fixed – Dashboard UI to display "await" keyword on all task-like methods.
• Fixed – Display links properly in an informational message on the Servers page in Dashboard UI.
• Fixed – Wait for the heartbeat process before shutting down a server.

Hangfire.SqlServer

• Fixed – Potential deadlocks cause by suboptimal queries when using `SlidingInvisibilityTimeout` fetching.
• Fixed – Prevent zero delays between fetch retry attempts when lock acquisition failed without blocking.
• Fixed – Specify float precision explicitly for the `Score` column in the `AddToSet` method.

1.7.3

Hangfire.Core

• SECURITY – Use `HtmlEncode` in all remaining places in Dashboard UI to prevent XSS attacks.

• Added – Added Dutch language, and updated missing translation on "Servers" page (by @r-win).
• Added – `Cron.Never` method for adding manual recurring jobs that never fire (by @michaltalaga).
• Fixed – Add missing `AddOrUpdate` extension methods for the `IRecurringJobManager` interface.
• Deprecated – Unused `HtmlHelper.FormatProperties` method is now obsolete.

Hangfire.SqlServer

• Fixed – Wrong error message in migration script, when @CurrentSchemaVersion has a NULL value (by @penenkel).

1.7.2

Hangfire.Core

• Added – `DashboardOptions.TimeZoneResolver` property to handle custom time zone resolvers in Dashboard UI.
• Fixed – `RecurringJob.AddOrUpdate` method is now able to update a broken recurring job.
• Fixed – Recurring job scheduler now properly handles recurring jobs whose job method or time zone is wrong.
• Fixed – Don't throw an exception on Recurring Jobs page when time zone can't be resolved.

Hangfire.AspNetCore & Hangfire.NetCore

• Added – Automatically resolve `ITimeZoneResolver` service for the `DashboardOptions.TimeZoneResolver` property.
• Fixed – Allow to resolve `IJobFilterProvider` service from the `AddHangfire` method.

Hangfire.SqlServer

• Fixed – Occasional "DataException: Error parsing column" error when using blocking fetch.

1.7.1

Hangfire.Core

• Added – `DashboardOptions.IgnoreAntiforgeryToken` property to disable token validation in Dashboard UI.
• Added – Display hints regarding server status on Servers page in Dashboard UI.
• Added – Highlight recurring jobs with no next execution in Dashboard UI.
• Added – Show actual error in Dashboard UI when recurring job has an invalid Cron expression.
• Fixed – `InvalidOperationException` when `AllowSynchronousIO` option isn't set in ASP.NET Core 3.0.
• Fixed – Set `NextExecution` value to `null` when existing recurring job has an invalid Cron expression.
• Fixed – Make dashboard charts to be more culture-specific to use correct time format.
• Fixed – Obsolete `UseSerializationSettings` comment now contains correct method name (by @PaitoAnderson).
• Project – `resx` files now re-generated automatically when building a project.

Hangfire.NetCore

• Added – Worker Service host support for .NET Core without unnecessary dependencies to ASP.NET Core.

Hangfire.SqlServer

• Changed – Use blocking fetch implementation only for sub-second polling intervals.
• Fixed – Don't fail with an exception when can't connect to MSSQL instance during start-up.
• Fixed – Don't access the `JobQueue` table when using blocking query and don't have results.

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.

Showing the top 6 GitHub repositories that depend on HangFire:

Repository Stars
dotnetcore/OSharp
OSharp是一个基于.NetCore的快速开发框架,框架对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、Mvc(WebApi)、身份认证、功能权限、数据权限等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与操作流程,使 .Net Core 框架更易于应用到实际项目开发中。
HTBox/allReady
This repo contains the code for allReady, an open-source solution focused on increasing awareness, efficiency and impact of preparedness campaigns as they are delivered by humanitarian and disaster response organizations in local communities.
q315523275/FamilyBucket
集合.net core、ocelot、consul、netty、grpc、eventbus、configserver、tracing、sqlsugar、vue-admin、基础管理平台等构建的微服务一条龙应用
Dynatrace/superdump
A service for automated crash-dump analysis
phongnguyend/Practical.CleanArchitecture
Sample Asp.Net Core 3.1 projects (+ Angular 9.0, React 16.13, Vue 2.6) which apply modern Clean Architecture, Domain-Driven Design, CQRS, Unit Testing, SOLID, Asp.Net Core Identity Custom Storage, Entity Framework Core, Identity Server 4, Blazor, Automated Testing With Selenium, Notification with SignalR, Tasks Scheduling with Hangfire, Health Checks, Security Headers, ...
revoframework/Revo
Event Sourcing, CQRS and DDD framework for C#/.NET Core.

Read more about the GitHub Usage information on our documentation.

Version History

Version Downloads Last updated
1.7.10 0 4/2/2020
1.7.9 139,582 1/20/2020
1.7.8 162,934 12/5/2019
1.7.7 206,221 10/22/2019
1.7.6 478,142 8/5/2019
1.7.5 81,388 7/18/2019
1.7.4 122,876 6/28/2019
1.7.3 244,617 5/23/2019
1.7.2 198,954 4/29/2019
1.7.1 100,476 4/16/2019
1.7.0 167,644 3/29/2019
1.6.28 1,659 1/14/2020
1.6.27 22,516 6/27/2019
1.6.26 22,739 5/23/2019
1.6.25 8,219 4/9/2019
1.6.24 18,570 3/27/2019
1.6.23 120,226 3/13/2019
1.6.22 367,124 1/25/2019
1.6.21 513,809 11/1/2018
1.6.20 564,950 7/31/2018
1.6.19 705,565 4/6/2018
1.6.18 11,086 4/5/2018
1.6.17 951,129 9/19/2017
1.6.16 75,400 9/2/2017
1.6.15 126,199 8/8/2017
1.6.14 188,572 6/16/2017
1.6.13 34,188 6/7/2017
1.6.12 340,428 3/22/2017
1.6.11 22,199 3/14/2017
1.6.10 7,534 3/13/2017
1.6.9 29,501 3/2/2017
1.6.8 196,773 12/21/2016
1.6.7 79,511 11/25/2016
1.6.6 96,310 10/13/2016
1.6.5 80,350 9/24/2016
1.6.4 63,277 8/30/2016
1.6.3 29,841 8/19/2016
1.6.2 34,096 8/5/2016
1.6.1 27,003 7/27/2016
1.6.0 17,310 7/15/2016
1.5.9 34,272 7/11/2016
1.5.8 26,925 6/17/2016
1.5.7 17,155 5/30/2016
1.5.6 47,646 4/22/2016
1.5.5 16,234 4/14/2016
1.5.4 34,139 3/22/2016
1.5.3 189,514 11/6/2015
1.5.2 16,249 10/15/2015
1.5.1 4,114 10/14/2015
1.5.0 26,140 10/1/2015
1.4.7 3,492 10/1/2015
1.4.6 20,397 8/29/2015
1.4.5 25,148 7/24/2015
1.4.4 2,918 7/23/2015
1.4.3 29,043 5/27/2015
1.4.2 10,300 5/6/2015
1.4.1 17,798 4/14/2015
1.3.4 44,546 2/4/2015
1.3.3 4,402 1/28/2015
1.3.2 3,113 1/27/2015
1.3.1 8,282 1/13/2015
1.3.0 6,479 12/10/2014
1.2.2 9,578 11/24/2014
1.2.1 2,836 11/22/2014
1.2.0 5,632 11/17/2014
1.1.1 15,323 9/5/2014
1.1.0 3,791 9/3/2014
1.0.2 6,229 7/1/2014
1.0.1 2,756 6/30/2014
1.0.0 2,898 6/30/2014
0.9.1 2,143 6/12/2014
0.9.0 1,320 6/7/2014
0.8.3 1,270 5/23/2014
0.8.2 1,183 5/21/2014
0.8.1 1,199 5/17/2014
0.8.0 2,152 5/2/2014
0.7.5 1,239 4/10/2014
0.7.4 1,195 4/7/2014
0.7.3 1,142 4/4/2014
0.7.2 1,115 4/4/2014
0.7.1 1,147 4/1/2014
0.7.0 1,200 3/22/2014
0.6.2 1,214 1/28/2014
0.6.1 1,147 1/27/2014
0.6.0 1,220 1/27/2014
0.5.2 1,189 11/19/2013
0.5.1 1,217 11/12/2013
0.5.0 2,426 11/10/2013
Show less