Documentation¶
Overview¶
Hangfire allows you to kick off method calls outside of the request processing pipeline in a very easy, but reliable way. These method invocations are performed in a background thread and called background jobs.
From the 10.000-feet view the library consists of three main components: client, storage and server. Here is a small diagram that describes the main processes in Hangfire:
Requirements¶
Hangfire is not tied to the specific .NET application type. You can use it in ASP.NET web applications, non-ASP.NET web applications, in console applications or Windows services. Here are the requirements:
.NET Framework 4.5.1 or later
Persistent storage (listed below)
Newtonsoft.Json library ≥ 5.0.1
Client¶
You can create any kind of background jobs using Hangfire: fire-and-forget (to offload the method invocation), delayed (to perform the call after some time) and recurring (to perform methods hourly, daily and so on).
Hangfire does not require you to create special classes. Background jobs are based on regular static or instance methods invocation.
var client = new BackgroundJobClient();
client.Enqueue(() => Console.WriteLine("Easy!"));
client.Delay(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(1));
There is also more easy way to create background jobs – the BackgroundJob
class that allows you to use static methods to perform the creation task.
BackgroundJob.Enqueue(() => Console.WriteLine("Hello!"));
The control is returned to a caller just after Hangfire serializes the given information and saves it to the storage.
Storage¶
Hangfire keeps background jobs and other information that relates to the processing inside a persistent storage. Persistence helps background jobs to survive on application restarts, server reboots, etc. This is the main distinction between performing background jobs using CLR’s Thread Pool and Hangfire. Different storage backends are supported:
SQL Azure, SQL Server 2008 R2 (and later of any edition, including Express)
GlobalConfiguration.Configuration.UseSqlServerStorage("db_connection");
Server¶
Background jobs are processed by Hangfire Server. It is implemented as a set of dedicated (not thread pool’s) background threads that fetch jobs from a storage and process them. Server is also responsible to keep the storage clean and remove old data automatically.
All you need is to create an instance of the BackgroundJobServer
class and start the processing:
using (new BackgroundJobServer())
{
Console.WriteLine("Hangfire Server started. Press ENTER to exit...");
Console.ReadLine();
}
Hangfire uses reliable fetching algorithm for each storage backend, so you can start the processing inside a web application without a risk of losing background jobs on application restarts, process termination and so on.
Table of Contents¶
- Getting Started
- Configuration
- Background Methods
- Background Processing
- Processing Background Jobs
- Processing Jobs in a Web Application
- Processing Jobs in a Console Application
- Processing Jobs in a Windows Service
- Dealing with Exceptions
- Tracking the Progress
- Configuring the Degree of Parallelism
- Placing Processing into Another Process
- Running Multiple Server Instances
- Configuring Job Queues
- Concurrency & Rate Limiting
- Best Practices
- Deployment to Production
- Extensibility
- Tutorials
- Upgrade Guides