第二十二节:Asp.Net Core中使用托管服务实现后台任务
1. 说明
BackgroundService 是用于实现长时间运行的 IHostedService 的基类,使用程序集:Microsoft.Extensions.Hosting。
2. 实现方式
继承BackgroundService类,然后override ExecuteAsync这个方法,在这个方法内利用while循环执行长时间任务,stoppingToken.IsCancellationRequested判断是否取消, 可以用base.StopAsync(stoppingToken);停止这个任务的执行。
最后需要在 ConfigureService中注册: services.AddHostedService<TestBackService1>();
3. 实战测试
public class TestBackService1 : BackgroundService
{
protected async override Task ExecuteAsync(CancellationToken stoppingToken)
{ while (!stoppingToken.IsCancellationRequested)
{
try
{
StreamWriter sw = System.IO.File.AppendText("Log/test.txt");
//追加文本
await sw.WriteLineAsync($"当前时间为:{DateTime.Now}");//自动换行
sw.Close(); await Task.Delay(TimeSpan.FromSeconds()); //测试报错,进入catch停止后台任务
//int.Parse("dsfs"); }
catch (Exception ex)
{
StreamWriter sw = System.IO.File.AppendText("Log/test.txt");
await sw.WriteLineAsync($"当前时间为:{DateTime.Now},报错了:{ex.Message}");//自动换行
sw.Close(); //根据实际业务情况,决定报错了是继续执行还是停止改后台任务
//await base.StopAsync(stoppingToken);
}
}
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(); //注册后台托管服务
services.AddHostedService<TestBackService1>();
}
最终结论:
我们把这个案例挂到IIS上测试,启动该项目,发现20分钟后不再写入日志,这是因为IIS默认的闲置超时是20分钟,IIS将回收;我们把他改为120分钟,经测试发现120分钟后将不在写入了。
注:闲置超时20分钟,是指20分钟内没有任何请求进行访问,如果有请求则这个闲置超时时间会重新计算。如果场景是定时任务,且期间没有请求,该方案不适合,因为IIS会回收它,这一点类似Quartz.Net 部署在IIS上是一个道理的。
如果场景是利用队列发送聊天消息,消息是会经常发送的,经常有请求,所有这个场景是可以用的。
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
第二十二节:Asp.Net Core中使用托管服务实现后台任务的更多相关文章
- 在asp.net core中使用托管服务实现后台任务
在业务场景中经常需要后台服务不停的或定时处理一些任务,这些任务是不需要及时响应请求的. 在 asp.net中会使用windows服务来处理. 在 asp.net core中,可以使用托管服务来实现,托 ...
- ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图
原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘) .张仁建(第二年.夏) .许登洋(Seay) .姚阿勇 ...
- 在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度
在这篇文章中,我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业.这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态.接下来我将演示如何创建一个简 ...
- ASP.NET Core中使用GraphQL - 第二章 中间件
前文:ASP.NET Core中使用GraphQL - 第一章 Hello World 中间件 如果你熟悉ASP.NET Core的中间件,你可能会注意到之前的博客中我们已经使用了一个中间件, app ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
- 在ASP.NET Core中使用百度在线编辑器UEditor
在ASP.NET Core中使用百度在线编辑器UEditor 0x00 起因 最近需要一个在线编辑器,之前听人说过百度的UEditor不错,去官网下了一个.不过服务端只有ASP.NET版的,如果是为了 ...
- ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...
- 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证
注:下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angu ...
- ASP.NET Core 中文文档
ASP.NET Core 中文文档 翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先 ...
随机推荐
- hibernate手动设置的id无效的原因与解决方法
在使用Hibernate的过程中,发现手动设置的id(主键)无效,Hibernate仍然会在保存(调用Hibernate提供的merge()方法)的时候自动生成一个随机的id. 经过调试发现问题出在了 ...
- 深入理解java中的byte类型
作者 | 进击的石头--GO! 来源 | https://www.cnblogs.com/zl181015/p/9435035.html#4432849 Java也提供了一个byte数据类型,并且是基 ...
- Python爬取十四万条书籍信息告诉你哪本网络小说更好看
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: TM0831 PS:如有需要Python学习资料的小伙伴可以加点击 ...
- Python爬取上交所一年大盘数据
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 半个码农2018 PS:如有需要Python学习资料的小伙伴可以加点 ...
- CAD画三维图怎么渲染?一分钟教你快速操作
从事过CAD相关工作的都知道,CAD绘制的方式有二维平面图以及三维图形,三维图形,画三维图方式也是比较简单的.那当然三维图画完后一般还需要进行渲染操作,步骤也是比较简洁的.下面就来给大家操作一下CAD ...
- 敏捷软件开发_实例1<二>
敏捷软件开发_实例1 这本书的实例非常好,给了我非常多的启发.主要讲了两个实例,咖啡机和薪水支付实例,咖啡机实例比较简单并没有用什么设计模式,薪水支付实例用了很多设计模式,包括后面的打包等. 咖啡机实 ...
- Excel的VBA小练习
从我学生时代就知道EXCEL,但是对VBA了解那可真是中学认知了,但是很遗憾,那时没太研究,就像BASIC一样,那时的视野层面认为代码没有大括号什么的,看着也麻烦,其实是没有编程经验,所以看着不适应, ...
- Mysql—数据导入与导出
数据导入 作用:把文件系统里的内容导入到数据库表中. 语法: mysql> load data infile "文件名" into table 表名 fields termi ...
- [Go] vscode配置Go环境
首先要先把环境变量配置好,配置好环境变量打开go文件的时候,会自动提示需要安装的扩展在/root/.profile和/home/当前用户/.profile都加上 export GOPATH=/var/ ...
- phpstudy配置虚拟域名
之前有一篇使用xampp配置虚拟域名,但是不同公司使用的集成环境不同,(xampp是我自己用的,别误解(><) !)这次使用的phpstudy,相比较而言,phpstudy更简单一点 首先 ...