using ConsoleApp2.Const; using ConsoleApp2.Helpers; using ConsoleApp2.HostedServices.Abstractions; using ConsoleApp2.Options; using ConsoleApp2.Services; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace ConsoleApp2.HostedServices; /// /// 从MyDumper导出的CSV文件中导入表头和数据 /// public class InputService : IInputService { private readonly ILogger _logger; private readonly IOptions _dataInputOptions; private readonly ProcessContext _context; public InputService(ILogger logger, IOptions dataInputOptions, ProcessContext context) { _logger = logger; _dataInputOptions = dataInputOptions; _context = context; } public async Task ExecuteAsync(TasksOptions tasksOptions, DataRecordQueue producerQueue, ProcessContext context,CancellationToken cancellationToken) { var inputDir = _dataInputOptions.Value.InputDir; _logger.LogInformation("***** Csv input service start, working dir: {InputDir}, thread id: {ThreadId} *****", inputDir, Environment.CurrentManagedThreadId); var files = Directory.GetFiles(inputDir); if (files.Length == 0) { _logger.LogInformation("No source files found in {InputDir}", inputDir); return; } var count = 0; foreach (var tableName in tasksOptions.TableInfoConfig.Keys) { _logger.LogInformation("Working table: {tableName}", tableName); var source = _dataInputOptions.Value.CreateSource?.Invoke(tableName); await source.DoEnqueue((record) => { _context.AddInput(); producerQueue.Enqueue(record); count++; }); if (_context.GetExceptions().Count > 0) { _logger.LogInformation("***** Csv input service is canceled *****"); return; } _logger.LogInformation("table:'{tableName}' input completed", tableName); } context.CompleteInput(); _logger.LogInformation("***** Csv input service completed *****"); } }