Incredibly 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 application. 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.
See the version list below for details.
* Fixed – TaskCanceledException causes the job to be Processing state indefinitely.
* Fixed – Child job isn't executed when created in a TransactionScope with MSMQ.
* Fixed – SQL command timeout in `DisableConcurrentExecution` filter (by @Tom-Kelly).
* Fixed – SQL deadlocks in `ExpirationManager` background process.
* Fixed – Too many queries in `SchedulePoller` when background job is missing or in another state.
* Fixed – "This stream does not support seek operations." exception in Dashboard buttons and stats.
* Fixed – `InvalidCastException` in Dashboard when using Microsoft.Owin 3.0.1 package.
* Fixed – Non-working buttons and counter updates in Dashboard when a body stream isn't at the start position.
* Fixed – SQL Server storage does not work with case-sensitive and binary collations (by @ilessa).
* Fixed – "Incorrect syntax near 'MERGE'" error in `CountersAggregator` component.
* Fixed – `OverflowException` on Job Details page when latency is too high (by @schulz3000).
* Fixed – Job serialization fix when using `TypeNameHandling.All` option (by @tystol).
* Added – Missing generic methods for continuations (by @yngndrw).
* Fixed – MSMQ extension does not work without explicit queue names in `UseMsmqQueues`.
* Fixed – Missing null-check in Retries page after casting connection to `JobStorageConnection`.
* Fixed – Enqueued jobs cannot be deleted from the Dashboard.
* Fixed – Error when building the project using `build.bat` on a machine with VS 2013 only (by @Cussa).
* Fixed – Incompatibility issue with RabbitMQ.Client >= 3.4.0 (by @justmara).
* Fixed – 1.4.0 ignoring `BackgroundJobServerOptions` settings in `UseHangfireServer` method.
* Added – Job continuations, please see new `BackgroundJob.ContinueWith` methods.
* Added – Time zone support for recurring jobs using `TimeZoneInfo` class.
* Added – Single place for global configuration, please see `GlobalConfiguration` class.
* Added – Made configurable the 'Back to Site' path in the dashboard (by @ysasaki1985).
* Added – Ability to plug in custom dashboard pages and modify navigation.
* Added – Ability to add custom metrics to the Home page in Dashboard.
* Added – Test coverage badge from Coveralls application.
* Added – Dedicated page for retrying jobs to distinguish them from other scheduled jobs.
* Added – Show expiration time on Job Details page.
* Added – More methods for build-in storage through `JobStorageConnection` and `JobStorageTransaction` classes.
* Added – Paging support for Recurring Jobs page.
* Added – New OWIN's `IAppBuilder` extension methods: `UseHangfireDashboard` and `UseHangfireServer`.
* Added – Add a notice about failed jobs expiration time.
* Added – Show warnings in Dashboard for jobs processing by inactive servers.
* Changed – New look and feel for Dashboard. New navigation, less colors, more accents.
* Changed – Determine job type of a current object when `MethodCallExpression` has `Object` property set.
* Changed – Making Product Version and File Version on the dll match the Assembly Version (by @fire-eagle).
* Changed – Use different log level for exceptions occured within automatic retry wrapper.
* Changed – Retry a job when there was an exception during state transition instead of moving it to the Failed state.
* Fixed – Recurring Page throws exception from CronExpressionDescriptor library.
* Fixed – Hangfire stops processing when storage outage was too long.
* Fixed – Don't leak foreground colors in ColouredConsoleLogger.
* Obsolete – `BackgroundJobServer`'s `Start` and `Stop` methods are obsolete.
* Added – Ability to pass isolation level to use in transactions, default is `serializable`.
* Added – Make the expiration check interval configurable (by @travisblakeney).
* Changed – Use read committed or parent transaction isolation level instead of `serializable`.
* Changed – Automatically aggregate records in `Hangfire.Counter` table.
* Changed – Add indexes to prevent blocking rows by Expiration Manager.
* Changed – Remove the `with tablock` hint from the expiration cleanup (by @travisblakeney).
* Changed – Don't pass IsolationLevel to TransactionScope by default.
* Changed – Coarse grained locks for Hash, List and Set tables to prevent deadlocks.
* Fixed – Retry on deadlocks during automatic migration on server restart.
* Changed – Speed up `GetCount` method with native implementation.
* Fixed – Incorrect order of fetching when multiple queues used.
* Added – Allow a URI to be used for `RabbitMQConnectionConfiguration` (by @dennyferra).