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.8.3

10 months ago

Release Notes

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.

v1.8.2

11 months ago

Release Notes

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

  • FixedInvalidOperationException with new dashboard metrics when a database has multiple data/log files.

v1.8.1

11 months ago

Release Notes

Hangfire.Core

  • AddedMisfireHandlingMode.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.
  • Fixedstate-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.28 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.

v1.7.35

11 months ago

Release Notes

Hangfire.SqlServer

  • Fixed – Blocked workers regression since 1.7.28 when using multiple servers inside a process.

v1.8.0

1 year ago

Release Notes

Please see more human-friendly release notes in our blog https://www.hangfire.io/blog/2023/04/28/hangfire-1.8.0.html. Please see https://docs.hangfire.io/en/latest/upgrade-guides/upgrading-to-hangfire-1.8.html to learn how to upgrade.

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.
  • AddedIBackgroundJobClient.Create method overloads with the new queue parameter.
  • Added – Allow to filter exception types in AutomaticRetryAttribute by using the new OnlyOn property.
  • AddedDeletedState now has the persisted Exception property populated after a failure.
  • AddedJobContinuationOptions.OnlyOnDeletedState to create continuations 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 – Make it possible to specify multiple JobContinuationOptions values for a continuation.
  • AddedBackgroundJobServerOptions.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).
  • AddedMisfireHandlingMode.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.
  • AddedIGlobalConfiguration.UseFilterProvider extension method to unify the configuration.
  • Added – Built-in Remove method for JobFilterCollection to remove global filters based on their type.
  • AddedCompatibilityLevel.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.
  • 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 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.
  • AddedDefaultRecordsPerPage property on the DashboardOptions class (by @PaulARoy).
  • AddedIGlobalConfiguration.UseJobDetailsRenderer method for custom renderers for the 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.
  • 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

  • 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 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

  • 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 the 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.NetCore

  • AddedIApplicationBuilder.UseHangfireServer that accepts custom factory for IBackgroundProcessingServer.
  • Addednet451 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.
  • AddedIApplicationBuilder.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.
  • AddedSchema 8 migration with fixed JobQueue.Id column to use the bigint type.
  • AddedSchema 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).
  • AddedSqlServerStorageOptions.DbProviderFactory option to use a custom provider factory.
  • Added – Clean up of old state entries of a non-finished job when InactiveStateExpirationTimeout is set.
  • AddedTryAutoDetectSchemaDependentOptions 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.
  • AddedSqlServerStorage.SchemaVersion metric for Dashboard UI.
  • AddedDefaultQueueProvider 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.
  • ChangedGetJobData 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.
  • DeprecatedUsePageLocksOnDequeue 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.

v1.8.0-rc4

1 year ago

Release Notes

Hangfire.Core

  • AddedDefaultRecordsPerPage property on the DashboardOptions class (by @PaulARoy).

Hangfire.NetCore

  • Changed – Send the "stop" signal earlier when host supports .NET Standard 2.1.
  • Changed – Don't throw ObjectDisposedException when hosted service disposed twice.

Hangfire.SqlServer

  • AddedSchema 9 migration that creates index for the State.CreatedAt column.
  • Added – Clean up of old state entries of a non-finished job when InactiveStateExpirationTimeout is set.
  • AddedDefaultQueueProvider option to specify a custom default queue provider.
  • Changed – Enable common metrics for SQL Server storage to be shown by default.

v1.8.0-rc3

1 year ago

Release Notes

Please see release notes in our blog – https://www.hangfire.io/blog/2023/03/30/hangfire-1.8.0-rc3.html.

Hangfire.Core

  • Added – Introduce the captureDefault parameter in the CaptureCulture filter.
  • Added – Built-in awaiting metric through the StatisticsDto.Awaiting for monitoring stats.
  • AddedJobStorageFeatures class to avoid using magic strings in storage features.
  • Added – Create job atomically when corresponding storage feature supported.
  • Added – Support for new MonitoringApi methods for the Awaiting Jobs page.
  • Changed – Rely on captureDefault when dealing with default cultures instead of compatibility level.
  • Changed – Rename in a non-breaking way SetContains to GetSetContains for consistency.
  • Changed – Rely on storage indexing with Monitoring.AwaitingJobs feature.
  • Changed – Rename the BatchedGetFirstByLowest feature.
  • Changed – Throw more descriptive NotSupportedException from new storage methods
  • Changed – Make new methods in JobStorageMonitor virtual, not abstract.
  • Changed – Change GetSetCount with multiple keys in a non-breaking way.
  • Fixed – Throw an exception early when Job.Queue feature not supported.
  • Fixed – Don't show assembly details in deleted state renderer.
  • Rollback – Use the AttemptsExceededAction.Delete option by default in the global automatic retry filter.

Hangfire.SqlServer

  • Changed – Enable the Monitoring.AwaitingJobs feature for SQL storage.
  • Changed – Implement the Transaction.AcquireDistributedLock feature.
  • Changed – Implement the GetSetCount.Limited feature.
  • Changed – Implement the GetSetContains feature.
  • Fixed – Detect schema-related options after migration, not before, to get the actual schema version.

v1.7.34

1 year ago

Release Notes

Hangfire.Core

  • Added – Add reschedule functionality to BackgroundJob and IBackgroundJobClient (by @chrischu).
  • FixedArgumentNullException with tricky generic type with inheritance case for jobs.
  • Fixed – Display "Aborted servers will be removed…" note only once aborted threshold passed.

v1.7.33

1 year ago

Release Notes

Hangfire.SqlServer

  • Changed – Use SQL Server as a time authority for server heartbeats.
  • Changed – Increase MinPollingDelayMs for SQL Server to 100 milliseconds.
  • Changed – Don't wait on SQL Server's side when using long polling for fetching.

Hangfire.AspNetCore

  • Fixed – Implement support IAsyncDisposable for IServiceScope instances for newer .NET platforms.

v1.8.0-rc2

1 year ago

Release Notes

Hangfire.Core

  • Added – Support for default culture and UI culture via the UseDefaultCulture configuration method.
  • AddedCompatibilityLevel.Version_180 flag to avoid storing culture parameters when they are the same as default.
  • AddedBackgroundJobServerOptions.IsLightweightServer option to run server with no storage processes.
  • Changed – Use UI culture from CurrentCulture parameter when CurrentUICulture one is missing.

Hangfire.SqlServer

  • Breaking – Prioritise Microsoft.Data.SqlClient package over System.Data.SqlClient one.
  • Changed – Bump internal version of Dapper to 2.0.123.
  • Changed – Remove System.Data.SqlClient package from the NuGet dependency graph (by @0xced).

Hangfire.NetCore

  • Addednet451 and netstandard1.3 targets for the package.
  • Changed – Use netstandard2.1 target instead of netcoreapp3.0 for the package.

Hangfire.AspNetCore

  • Breaking – Make the package to be dependent on Hangfire.NetCore to use the same types.