コード例 #1
0
        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();
                }
            });
        }
コード例 #2
0
        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");
            });
        }
コード例 #3
0
 public FileHandlerService(int maxDegreeOfParallelism, AbstractLogger logger)
 {
     this.maxDegreeOfParallelism = maxDegreeOfParallelism;
     this.logger = logger;
 }