HangFire快速入门

安装

NuGet 上有几个可用的Hangfire 的软件包。若是在ASP.NET应用程序中安装HangFire,并使用Sql Server做为存储器,那么请在Package Manager Console窗口中键入如下命令:html

PM> Install-Package Hangfire

配置

在安装package后,添加或者更新如下几行到Owin Startp类:git

using Hangfire;

// ...

public void Configuration(IAppBuilder app)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>");

    app.UseHangfireDashboard();
    app.UseHangfireServer();
}

须要配置受权

默认状况下,只有本地有权限访问Hangfire仪表板。若是须要受权远程访问,那么仪表板的受权必须进行相应的配置。github

而后打开Hangfire仪表板来测试您的配置。编译项目并在浏览器中打开如下URL:express

http://<your-site>/hangfire

 

用法

添加工做

HangFire处理不一样类型的后台任务,而且使用一个独立的上下文环境调用他们。浏览器

Fire-And-forget(发布/订阅)

这是一个主要的后台任务类型,持久化消息队列会去处理这个任务。当你建立了一个发布/订阅任务,该任务会被保存到默认队列里面(默认队列是"Default",可是支持使用多队列)。多个专一的工做者(Worker)会监听这个队列,而且从中获取任务而且完成任务。app

BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget"));

延迟

若是想要延迟某些任务的执行,能够是用如下任务。在给定延迟时间后,任务会被排入队列,而且和发布/订阅任务同样执行。测试

BackgroundJob.Schedule(() => Console.WriteLine("Delayed"), TimeSpan.FromDays(1));

 

循环

按照周期性(小时,天等)来调用方法,请使用RecurringJob类。在复杂的场景,您能够使用CRON表达式指定计划时间来处理任务。优化

RecurringJob.AddOrUpdate(() => Console.WriteLine("Daily Job"), Cron.Daily);

 

连续

连续性容许您经过将多个后台任务连接在一块儿来定义复杂的工做流。ui

var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, "));
BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!"));

 

释放

Hangfire将您的任务保存到持久化库汇总,而且以可靠的方式处理它们。这意味着,你能够中断Hangfire Worder的线程,从新加载应用程序域,或者终止程序,即便这样您的任务仍会被处理。只有在你代码的最后一行执行完成,Hangfire才会标记这个任务完成。而且知道任务可能在最后一行代码执行以前失败。它包含多种 自动-重试机制,它能够自动处理在存储或代码执行过程当中发生的错误。spa

这对于通用托管环境(如IIS Server)很是重要。它们能够包含不一样的优化,超时和错误处理代码(可能致使进程终止)来防止很差的事情发生。若是您没有使用可靠的处理和自动机制,您的工做可能会丢失。您的最终用户可能无限期等待某些任务,如电子邮件,报告,通知等。

可是当您的存储空间破损时,Hangfire没法作任何事情。请为您的存储使用不一样的故障切换策略,以保证在发生灾难时处理每一个做业。

 

原文地址:http://docs.hangfire.io/en/latest/quick-start.html

相关文章
相关标签/搜索