MES-ETL/ConsoleApp2/HostedServices/VoidOutputService.cs
2024-02-01 10:04:00 +08:00

43 lines
1.3 KiB
C#

using ConsoleApp2.HostedServices.Abstractions;
using ConsoleApp2.Services;
using Microsoft.Extensions.Logging;
namespace ConsoleApp2.HostedServices;
// 空输出服务,测试用
public class VoidOutputService : IOutputService
{
private readonly ILogger _logger;
private readonly RecordQueuePool _queuePool;
private readonly ProcessContext _context;
public VoidOutputService(
ProcessContext context, ILogger<VoidOutputService> logger, RecordQueuePool queuePool)
{
_context = context;
_logger = logger;
_queuePool = queuePool;
}
public Task ExecuteAsync(CancellationToken ct)
{
_logger.LogInformation("***** Void Output Service Started *****");
while (!_context.IsTransformCompleted || _queuePool.Queues.Count > 0)
{
foreach (var pair in _queuePool.Queues) // 内存优化
{
if (_context.IsTransformCompleted && pair.Value.Count == 0)
{
_queuePool.RemoveQueue(pair.Key);
continue;
}
if(!pair.Value.TryDequeue(out var record)) continue;
_context.AddOutput();
}
}
_context.CompleteOutput();
_logger.LogInformation("***** Void Output Service Stopped *****");
return Task.CompletedTask;
}
}