Hangfire Versions Save

An easy way to perform background job processing in .NET and .NET Core applications. No Windows Service or separate process required

v1.7.32

1 year ago

Release Notes

Hangfire.Core

  • Added – First version of Swedish translation of the Dashboard UI (by @karl-sjogren).
  • Changed – More detailed message for exception when JobStorage.Current is not initialized.
  • Changed – Make TypeHelperSerializationBinder class public to use it from custom serializer settings.
  • Fixed – Small typos in French resources for the Dashboard UI (by @agriffard).
  • Fixed – Document the exception for the IJobCancellationToken interface method (by @judah4).

Hangfire.NetCore and Hangfire.AspNetCore

  • Changed – Wait for application to be ready before starting the server when using AddHangfireServer.
  • Fixed – Do not return null as result of StopAsync in hosted service implementation (by @tomaszek92).

v1.7.31

1 year ago

Release Notes

Hangfire.Core

  • AddedRecurringJob.TriggerJob method that returns identifier of a triggered background job.
  • AddedRecurringJobManager.TriggerJob as a replacement for the TriggerExecution method.
  • Changed – Update Moment.js library used by Dashboard UI to version 2.29.4 (by @mmitchell-w).
  • Fixed – Typos in pt-BR translation (by @gumbarros and @marcelcamargo).
  • Fixed – Added missing parameter annotations for methods of the RecurringJob class.
  • DeprecatedRecurringJob.Trigger method is now obsolete, TriggerJob is the replacement.
  • DeprecatedRecurringJobManager.TriggerExecution method is now obsolete, TriggerJob should be used instead.

New Contributors

Full Changelog: https://github.com/HangfireIO/Hangfire/compare/v1.7.30...v1.7.31

v1.8.0-rc1

1 year ago

Release Notes

Hangfire.Core

  • 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.
  • AddedIBackgroundJobClient.Create method overloads with the new queue parameter.
  • AddedJobContinuationOptions.OnlyOnDeletedState to create continuations after a failure.
  • Added – Make it possible to specify multiple JobContinuationOptions values for a continuation.
  • 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).
  • AddedMisfireHandlingMode.Strict to create job for each missed recurring job occurrence.
  • AddedDeletedState now have the persisted Exception property populated after a failure.
  • AddedException job parameter is passed to continuation when UseResultsInContinuations method is used.
  • AddedFromExceptionAttribute to deal with an antecedent exception in a background job continuation.
  • Added – Allow to filter exception types in AutomaticRetryAttribute by using the new OnlyOn property.
  • Added – Built-in Remove method for JobFilterCollection to remove global filters based on their type.
  • AddedIGlobalConfiguration.UseFilterProvider extension method to unify the configuration.
  • Changed – Use the AttemptsExceededAction.Delete option by default in the global automatic retry filter.
  • Changed – Query time from storage in recurring and delayed schedulers when supported by storage.
  • Changed – Increase the default value for the BackgroundJobServerOptions.StopTimeout to 500 ms.
  • Changed – Speedup delayed jobs when custom default queue is specified by avoiding extra state transition.
  • Changed – Move job to the DeletedState instead of SucceededState when its invocation was canceled by a filter.
  • DeprecatedAddOrUpdate overloads with optional params defined in the RecurringJobManagerExtensions class.
  • DeprecatedAddOrUpdate overloads with optional parameters defined in the RecurringJob class.
  • DeprecatedAddOrUpdate method overloads with no recurringJobId parameter.
  • DeprecatedRecurringJobOptions.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 configurable with the UseDarkModeSupportForDashboard method (by @danillewin).
  • Added – Dashboard UI now have 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.
  • AddedIGlobalConfiguration.UseJobDetailsRenderer method for custom renderers for Job Details page.
  • Added – Display deleted jobs in the Realtime and History graphs when supported by storage.
  • AddedIGlobalConfiguration.UseDashboardMetrics extension method to pass multiple metrics at once.
  • Added – State renderer for the DeletedState to display its new exception property.
  • Changed – Make it possible to display methods of non-loaded jobs in Dashboard UI when supported by storage.
  • Changed – Improved display of real-time chart with more accents on failed and deleted jobs.
  • Changed – Don't display queue name in state transition list when it's the default one.
  • Changed – Display scheduled job count when enqueued count is zero on the main metric.

Extensibility

  • AddedFactory, 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 transaction to background job state changer when new methods implemented.
  • Changed – Ignore some members when serializing a JobFilterAttribute instance to decrease payload size.

Storage

  • Added – Virtual JobStorage.GetReadOnlyConnection method intended to return JobStorageConnection for replicas.
  • Added – Virtual JobStorage.HasFeature method for querying optional features.
  • Added – Optional GetSetCount and GetUtcDateTime methods for the JobStorageConnection class.
  • Added – Optional AcquireDistributedLock and RemoveFromQueue methods for the JobStorageTransaction class.
  • Added – Support for transactional acknowledge using new storage method for better handling some data loss scenarios.
  • AddedCreateJob method to the JobStorageTransaction abstract class.
  • AddedSetJobParameter method to the JobStorageTransaction abstract class.
  • Added – Experimental JobStorageConnection.SetContains method.
  • Added – Optional ParametersSnapshot property for BackgroundJob and JobData classes to minimize roundtrips in future.
  • Added – Fetch "Retries" metric with other statistics when supported by storage.
  • AddedJobStorageMonitor class with more available methods for the new features.
  • Changed – Allow to query job parameters without additional roundtrip when supported by a storage.
  • Changed – Expose state data dictionaries in list DTOs when supported by storage.

Internals

  • AddedIBackgroundProcess.UseBackgroundPool now allows to pass thread configuration logic.
  • AddedBackgroundJobServerOptions.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.
  • ChangedFromParameterAttribute-based logic now always overwrites arguments, even with non-null values.
  • Changed – Turn JobContinuationOptions enum into flags while still possible.
  • Changed – Re-implement TaskExtensions.WaitOneAsync only with the RegisterWaitForSingleObject method.
  • ChangedServerHeartbeatProcess now uses ThreadPriority.AboveNormal to prioritize heartbeats.

Hangfire.SqlServer

  • Added – Recommended Schema 8 migration with fixed JobQueue.Id column to use the bigint type.
  • Added – Automatic client package detection based on available types, preferring System.Data.SqlClient (by @0xced).
  • AddedSqlServerStorageOptions.DbProviderFactory option to use custom provider factory.
  • AddedTryAutoDetectSchemaDependentOptions option to automatically enable options based on schema.
  • AddedSqlServerStorage.SchemaVersion metric for Dashboard UI.
  • Added – Optional experimental transactional acknowledge for SQL Server (UseTransactionalAcknowledge option).
  • Added – Implement the Connection.GetUtcDateTime feature to make work new changes in schedulers.
  • 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 5 minute timeout.
  • Changed – Use command batching by default with 5-minute maximum timeout.
  • Changed – Enable UseRecommendedIsolationLevel option by default.
  • ChangedGetJobData now populates JobData.ParametersSnapshot property to avoid additional round-trips.
  • Changed – Display scheduled and processing jobs in the ascending order in Dashboard UI.
  • DeprecatedUsePageLocksOnDequeue option is now obsolete and doesn't affect anything.
  • Breaking – Dropped NET45 platform target in favor of NET451 target to support Visual Studio 2022.

Hangfire.SqlServer.Msmq

  • Breaking – Dropped NET45 platform target in favor of NET451 target to support Visual Studio 2022.

Hangfire.NetCore and Hangfire.AspNetCore

  • AddedIApplicationBuilder.UseHangfireServer that accepts custom factory for IBackgroundProcessingServer.

v1.7.30

1 year ago

Release Notes

  • Fixed – Don't consider SecurityException as a non-catchable one.
  • Fixed – Replace timer with a dedicated thread in AspNetShutdownDetector to avoid depending on thread pool.
  • Fixed – Better ASP.NET shutdown detection with yet another check based on internal state.
  • Fixed – Decrease AspNetShutdownDetector's check intervals to detect shutdowns earlier.
  • Fixed – Don't wait for server stop on AppDomain unloads when hosting in IIS to avoid delaying them.

v1.7.29

2 years ago

Release Notes

Hangfire.Core

  • AddedRecurringJobManager.TriggerExecution method that returns identifier of a created job.
  • AddedGetRecurringJobIds extension method for JobStorageConnection that returns only identifiers.
  • AddedDashboardMetric.Url property to make it possible for metrics on the Overview page to be clickable (by @twinmind).
  • Changed – Bump Moment.js version to 2.29.3 in Dashboard UI (by @Westat-Transportation).
  • Fixed – Deserialization issues with DateOnly and TimeOnly in .NET 6.0 or other new types in CoreLib.
  • Fixed – Don't even try to catch unsafe exceptions like OutOfMemoryException or StackOverflowException.
  • Fixed – Add non-breaking space between Server Id and Status glyph on the Servers page.
  • Fixed – Problems with internal wait implementation shouldn't cause high CPU issues now, added protection and logging.
  • Fixed – Wait can't be performed now on a signaled ManualResetEvent instance in BackgroundExecution.

Hangfire.SqlServer

  • Fixed – Command batching is now fully working for the Microsoft.Data.SqlClient package (by @0xced).

v1.7.28

2 years ago

Release Notes

Hangfire.Core

  • Fixed – Reduce the number of attempts in BackgroundJobStateChanger to avoid infinite loops.
  • Fixed – Typos in German translation (by @saxx).
  • Fixed – Translations in Turkish translation (by @can-zengin).

Hangfire.SqlServer

  • Fixed – Possibly fixed CPU consumption problems and high amounts of fetching queries after deploys to IIS.
  • Fixed – No more than a single long-polling query is allowed per storage instance when using sub-second polling.
  • Fixed – Don't depend on thread pool when sending heartbeats for active jobs to avoid problems when it's starved.

v1.8.0-beta4

2 years ago

Release Notes

Hangfire.Core

  • Added – Dark mode support for Dashboard UI configurable with the UseDarkModeSupportForDashboard method.
  • Added – Allow to add custom JavaScript and CSS files to the Dashboard UI via the DashboardRoutes class.
  • Added – Ability to use custom formattable resource identifiers for the DisableConcurrentExecutionAttribute.
  • Changed – Increase the default value for the BackgroundJobServerOptions.StopTimeout to 500 ms.

Hangfire.SqlServer

  • AddedTryAutoDetectSchemaDependentOptions option to automatically enable options based on schema.
  • ChangedGetJobData now populates JobData.ParametersSnapshot property to avoid additional round-trips.
  • Changed – Polling delay when QueuePollInterval is set to zero now defaults to 200 ms.
  • DeprecatedUsePageLocksOnDequeue option is now obsolete and doesn't affect anything.

v1.7.27

2 years ago

Release Notes

Hangfire.Core

  • Added – Turkish language support for the Dashboard UI (by @csarigul).
  • Fixed – Trigger button in the Dashboard UI doesn't respect a custom time zone resolver.
  • Fixed – Dispatchers stopped when unable to add the ExecutionId data for an exception instance.
  • Fixed – Safari's zoom feature breaks the Dashboard UI (by @oguzhantopcu).
  • Fixed – Some typos in XML documentation comments (by @GitHubPang).

v1.7.26

2 years ago

Security Patch

This security patch fixes a regression appeared in the previous version 1.7.25 that makes Dashboard UI available for remote requests in the default configuration, e.g. when no authentication filter specified. Please note that when custom authentication filter is defined as recommended in the documentation, everything works as expected, but upgrade is recommended in any case. Please read the GHSA-7rq6-7gv8-c37h security advisory for details.

CVE ID
CVE-2021-41238
Affected Packages
Hangfire.Core = 1.7.25 (only)
Affected Platforms
All, including .NET Core, .NET Framework, Mono of any version

Hangfire.Core

  • Security – Fix "Dashboard UI accessible from outside by default since 1.7.25" regression.

v1.7.25

2 years ago

Release Notes

Hangfire.Core

  • Changed – Upgrade Bootstrap from 3.3.7 to version 3.4.1 in Dashboard UI.
  • Changed – Upgrade Chart.js from 2.7.3 to version 2.9.4 in Dashboard UI.
  • Changed – Upgrade jQuery from 2.2.4 to version 3.6.0 in Dashboard UI.
  • Fixed – Check background job existence before adding a continuation id to job parameters.
  • Fixed – Incorrect validation for the HeartbeatInterval option (by @GitHubPang).
  • Fixed – Use better stacking for succeeded/failed charts in the Dashboard UI.
  • Fixed – Move explicit styles to CSS to fix possible CSP errors in Dashboard UI.
  • Fixed – Reset default sync auth filter when async one is specified in Dashboard UI.

Hangfire.SqlServer

  • Fixed – Avoid any blocked rows when removing inactive servers from the Server table.

Hangfire.NetCore and Hangfire.AspNetCore

  • Added – More overloads for the AddHangfireServer extension method in .NET Core.
  • DeprecatedUseHangfireServer method for targets where AddHangfireServer one is available.