1、任务需求

在每次服务启动时定时(如24小时)清理一次缓存文件

2、代码实现

1)新建文件清理类

.NET Core 提供了BackgroundService的抽象类,在 ExecuteAsync 方法中执行特有的逻辑即可BackgroundService 类 -- 微软技术文档介绍https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.hosting.backgroundservice?view=dotnet-plat-ext-6.0https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.hosting.backgroundservice?view=dotnet-plat-ext-6.0

/// <summary>
/// 定时清理文件
/// </summary>
public class ScheduledCleanUpFileService: BackgroundService
{
private readonly ILogger _logger;
private CancellationTokenSource tokenSource;
public ScheduledCleanUpFileService(ILogger<ScheduledCleanUpFileService> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
if(!stoppingToken.IsCancellationRequested)
{
// 24小时清理一次文件
await Task.Delay(86400000, stoppingToken).ContinueWith(x =>
{
// 需要执行的任务
try
{
var filePath = AppDomain.CurrentDomain.BaseDirectory + "AppFileUploads/";
DirectoryInfo info = new DirectoryInfo(filePath);
// 去除文件夹的只读属性
info.Attributes = FileAttributes.Normal & FileAttributes.Directory;
// 去除文件的只读属性
File.SetAttributes(filePath, FileAttributes.Normal);
// 判断文件夹是否存在
if(Directory.Exists(filePath))
{
foreach(var file in Directory.GetFileSystemEntries(filePath))
{
if(File.Exists(file))
{
// 如果有子文件则删除子文件的所有文件
File.Delete(file);
}
}
}
}
catch(Exception ex)
{
_logger.LogError(ex, ex.Message);
}
});
}
else
{
await StopAsync(stoppingToken);
}
}
public override Task StartAsync(CancellationToken cancellationToken)
{
tokenSource = new CancellationTokenSource();
_logger.LogInformation("开始定时清理文件任务");
return base.StartAsync(tokenSource.Token);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
tokenSource.Cancel();
_logger.LogInformation("定时清理文件任务结束");
return base.StopAsync(tokenSource.Token);
}
}

2)在StartUp.cs中注入文件清理服务

public void ConfigureServices(IServiceCollection services)
{
// 注入定时清理文件服务
services.AddSingleton<IHostedService, ScheduledCleanUpFileService>();
}

3、总结

由此实现服务启动时每隔24小时执行一次文件清理服务

学习链接地址

【5min+】后台任务的积木。.NetCore中的IHostedService

ASP.NET Core 3.x启动时运行异步任务(一)

ASP.NET Core 3.x启动时运行异步任务(二)

最新文章

  1. CentOS7下安装chrome浏览器
  2. iphone 浏览器自动解析数字为号码解决方法
  3. android命令安装apk时报错:INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
  4. 记 Ubuntu14.04 Monodevelop 安装的两个问题
  5. 基于 SWTBot 进行 Eclipse GUI 自动化测试
  6. 每天一个linux命令(27)--tar命令
  7. eclipse远程调试Tomcat方法(测试成功并且说说遇到的坑)
  8. Django+xadmin打造在线教育平台(三)
  9. java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 Vector (向量)
  10. 分布式锁与实现(一)——基于Redis实现 【比较靠谱】
  11. Windows下PyMC安装
  12. oracle启动的三个阶段
  13. EventBus使用详解
  14. Linux下稀疏文件的存储方式
  15. NOIP模拟赛-2018.10.22
  16. BYTE数组与16进制字符串互转
  17. Python3中isdigit(), isdecimal(), isnumeric()的区别和字符串的常用方法
  18. 给 C# Expression Evaluator 增加中文变量名支持
  19. grub2 详解
  20. SDUT OJ 数据结构实验之图论六:村村通公路(最小生成树)

热门文章

  1. 27、求解n阶多项式的值,多项式公式如下
  2. 【云原生 · Kubernetes】Jenkins+Gitlab+Rancher+Docker 实现自动构建镜像的 CI 平台(一)
  3. 关于sublime-build的配置详解
  4. mysql安装及访问配置
  5. 【kafka】JDBC source&amp;sink connect实现数据从Oracle实时同步插入更新到PostgreSQL(PG)
  6. 【大数据面试】Flink 04:状态编程与容错机制、Table API、SQL、Flink CEP
  7. 【每日一题】【找到位置返回&amp;升序数组中第K大就是n-K小】2022年1月17日-NC88 寻找第K大
  8. 【大数据面试】【框架】kafka:组成、台数/参数配置、持久化、ISR队列、宕机、丢数据、重复数据、数据积压、优化各种配置(刷盘、存盘、副本、压缩)、zk、其他
  9. windowserver中PowerShell禁止脚本执行的解决方法
  10. frp内网穿透(已验证)