private static async Task ProduceAsync(ITargetBlock <string> target, string pathToFolder, CancellationToken token, AbstractLogger logger) { await Task.Run(async() => { var exsistedFiles = Directory.GetFiles(pathToFolder, "*.txt", SearchOption.AllDirectories); foreach (var item in exsistedFiles) { await target.SendAsync(item); } using (FileSystemWatcher watcher = new FileSystemWatcher()) { logger.WriteLine($"Producer started listening {pathToFolder}"); watcher.Path = pathToFolder; watcher.Filter = "*.txt"; watcher.Created += async(sender, e) => { await UglyWaitUntilTheFileIsFullyCreated(e.FullPath); target.Post(e.FullPath); }; watcher.EnableRaisingEvents = true; while (!token.IsCancellationRequested) { } ; logger.WriteLine($"Producer has stopped listening {pathToFolder}"); target.Complete(); } }); }
private static async Task ConsumeAsync(ISourceBlock <string> source, string pathToFolder, int maxDegreeOfParallelism, CancellationToken token, AbstractLogger logger) { await Task.Run(async() => { var documentPipeline = new DocumentsPipeline(AppDomain.CurrentDomain.BaseDirectory, pathToFolder, maxDegreeOfParallelism, token); documentPipeline.OnFinished += (s) => logger.WriteLine($"Сonsumer finished processing {s}"); logger.WriteLine("Consumer is ready"); while (await source.OutputAvailableAsync()) { var newFile = await source.ReceiveAsync(); await documentPipeline.Processing(newFile); logger.WriteLine($"Consumer started processing {newFile}"); } logger.WriteLine("Buffer is not available"); await documentPipeline.Complete(); logger.WriteLine("Consumer was stopped"); }); }
public FileHandlerService(int maxDegreeOfParallelism, AbstractLogger logger) { this.maxDegreeOfParallelism = maxDegreeOfParallelism; this.logger = logger; }