热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第二十一节:Asp.NetCore中使用托管服务实现后台任务

1. 说明

  BackgroundService 是用于实现长时间运行的 IHostedService 的基类,使用程序集:Microsoft.Extensions.Hosting。

2. 实现方式

  继承BackgroundService类,然后override ExecuteAsync这个方法,在这个方法内利用while循环执行长时间任务,stoppingToken.IsCancellationRequested判断是否取消, 可以用base.StopAsync(stoppingToken);停止这个任务的执行。

  最后需要在 ConfigureService中注册: services.AddHostedService();

3. 实战测试

 1 public class TestBackService1 : BackgroundService
 2     {
 3         protected async override Task ExecuteAsync(CancellationToken stoppingToken)
 4         {
 5            
 6             while (!stoppingToken.IsCancellationRequested)
 7             {
 8                 try
 9                 {
10                     StreamWriter sw = System.IO.File.AppendText("Log/test.txt");
11                     //追加文本               
12                     await sw.WriteLineAsync($"当前时间为:{DateTime.Now}");//自动换行
13                     sw.Close();
14 
15                     await Task.Delay(TimeSpan.FromSeconds(60));
16 
17                     //测试报错,进入catch停止后台任务
18                     //int.Parse("dsfs");
19 
20                 }
21                 catch (Exception ex)
22                 {
23                     StreamWriter sw = System.IO.File.AppendText("Log/test.txt");
24                     await sw.WriteLineAsync($"当前时间为:{DateTime.Now},报错了:{ex.Message}");//自动换行
25                     sw.Close();
26 
27                     //根据实际业务情况,决定报错了是继续执行还是停止改后台任务
28                     //await base.StopAsync(stoppingToken);
29                 }
30             }
31         }
32     }
1       public void ConfigureServices(IServiceCollection services)
2         {
3             services.AddControllersWithViews();
4 
5             //注册后台托管服务
6             services.AddHostedService();
7         }

最终结论:

  我们把这个案例挂到IIS上测试,启动该项目,发现20分钟后不再写入日志,这是因为IIS默认的闲置超时是20分钟,IIS将回收;我们把他改为120分钟,经测试发现120分钟后将不在写入了。

注:闲置超时20分钟,是指20分钟内没有任何请求进行访问,如果有请求则这个闲置超时时间会重新计算。如果场景是定时任务,且期间没有请求,该方案不适合,因为IIS会回收它,这一点类似Quartz.Net 部署在IIS上是一个道理的。

如果场景是利用队列发送聊天消息,消息是会经常发送的,经常有请求,所有这个场景是可以用的。

 

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

推荐阅读
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 在尝试使用 Android 发送 SOAP 请求时遇到错误,服务器返回 '无法处理请求' 的信息,并指出某个值不能为 null。本文探讨了可能的原因及解决方案。 ... [详细]
  • Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • 本文详细介绍了`android.os.Binder.getCallingPid()`方法的功能和应用场景,并提供了多个实际的代码示例。通过这些示例,开发者可以更好地理解如何在不同的开发场景中使用该方法。 ... [详细]
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • 在现代Web开发中,HTML5 Canvas常用于图像处理和绘图任务。本文将详细介绍如何将Canvas中的图像导出并上传至服务器,适用于拼图、图片编辑等场景。 ... [详细]
author-avatar
wonderoil
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有