using ConsoleApp2.Const; using ConsoleApp2.HostedServices.Abstractions; using ConsoleApp2.Options; using ConsoleApp2.Services; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace ConsoleApp2.HostedServices; // 空输出服务,测试用 public class VoidOutputService : IOutputService { private readonly ILogger _logger; private readonly DataRecordQueue _consumerQueue; private readonly ProcessContext _context; public VoidOutputService([FromKeyedServices(ProcessStep.Consumer)] DataRecordQueue consumerQueue, ProcessContext context, ILogger logger) { _consumerQueue = consumerQueue; _context = context; _logger = logger; } public Task ExecuteAsync(TasksOptions tasksOptions, DataRecordQueue consumerQueue, ProcessContext context, CancellationToken cancellationToken) { _logger.LogInformation("***** Void output service started, thread id: {ThreadId} *****", Environment.CurrentManagedThreadId); while (!_context.IsTransformCompleted || _consumerQueue.Count > 0) { if (_consumerQueue.TryDequeue(out var record)) _context.AddOutput(); } _context.CompleteOutput(); _logger.LogInformation("***** Void output service completed *****"); return Task.CompletedTask; } }