Build Server | Platform | Build Status |
---|---|---|
Azure Pipelines | Windows | |
Azure Pipelines | Linux |
Package | Version | Downloads |
---|---|---|
Spool |
将文件保存到文件池中,在需要的时候取出文件。
- 支持多线程并发读写
- 支持多个文件池在同一个程序中启动
- 支持文件使用后主动释放,主动归还的功能
- 支持应用程序自动归还,对文件未释放或者未归还的文件,应用程序可以自动归还
- 支持文件池监控指定的目录,当目录下有文件时自动写入到文件池
- 支持文件获取数量,文件写入线程数的控制
- 支持在依赖注入后(程序启动前)修改线程池配置参数
初始化代码
//Configure spool
services.Configure<SpoolOptions>(options =>
{
options.FilePools.ConfigureDefault(c =>
{
c.Name = DefaultFilePool.Name;
c.Path = "D:\\SpoolTest";
c.EnableFileWatcher = true;
c.FileWatcherPath = "D:\\SpoolWatcher";
c.EnableAutoReturn = true;
c.ScanReturnFileMillSeconds = 2000;
c.AutoReturnSeconds = 300;
});
});
//Add spool
services.AddSpool();
获取一个文件池
var filePool = serviceProvider.GetService<IFilePool<DefaultPool>>();
Or
var filePoolFactory = serviceProvider.GetService<IFilePoolFactory>();
var filePool = filePoolFactory.GetOrCreate("default");
//var filePool = filePoolFactory.GetOrCreate<DefaultPool>();
获取文件
var spoolFiles = filePool.GetFiles(50);
写入文件
filePool.WriteFileAsync(new MemoryStream(data), ".txt");
//filePool.WriteFileAsync("D:\\1.txt");
释放文件(释放文件后文件将会被删除)
filePool.ReturnFiles(spoolFiles);
归还文件(当某一批文件处理失败后,需要放回文件池)
filePool.ReleaseFiles(spoolFiles);
获待处理的文件数量
var count = filePool.GetPendingCount();
获取进行中的文件数量(GetFiles方法被取走的文件总数)
var count = filePool.GetProcessingCount();