Hangfire v1.7.0 Release Notes
Release Date: 2019-03-29 // about 5 years ago-
๐ Release Notes
โฌ๏ธ Please see the Upgrading to Hangfire 1.7 article to learn more about the upgrade steps.
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 inBackgroundJobServerOptions
for workers. - โ Added โ
IdempotentCompletionAttribute
filter to enforce strict order for continuations. - โ Added โ
IBackgroundJobClient.ContinueJobWith
methods to replaceContinueWith
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 withCancellationToken
(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
andThreadInterruptedException
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 fullPerformContext
(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 withTypeConverter
. - ๐ 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
andDataCompatibilityRangeTheory
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 onIHostedService
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 theIX_HangFire_Set_Score
index to include theKey
column. - โ Added โ
Schema 6
migration with less indexes, better physical layout andbigint
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.