Exemple #1
0
        private async Task <MonitoringResult> CreateNewFile(string file)
        {
            try
            {
                await limit.WaitAsync(token).ConfigureAwait(false);

                FileInfo fileInfo    = new FileInfo(file);
                var      previewTask = Task.Run(() => previewCreator.CreatePreview(fileInfo), token);
                string   className   = await classifier.Classify(fileInfo).ConfigureAwait(false);

                MonitoringResult result = new MonitoringResult(fileInfo, className, await previewTask.ConfigureAwait(false));
                result.MoveRequest += ResultOnMoveRequest;
                return(result);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            finally
            {
                limit.Release();
            }

            return(null);
        }
Exemple #2
0
        private async Task ProcessDirectory(string directory)
        {
            MonitoringResult[] results;
            if (!directoryFiles.TryGetValue(directory, out results))
            {
                results = new MonitoringResult[] { };
            }

            var fileTable = results.Where(item => pendingFiles.Contains(item))
                            .ToDictionary(item => item.File.FullName, item => item);

            var tasks = Directory.EnumerateFiles(directory)
                        .Where(item => watcher.CanUseFile(item))
                        .Select(file => ProcessFile(fileTable, file))
                        .ToList();
            await Task.WhenAll(tasks).ConfigureAwait(false);

            RemoveFiles(fileTable);
            directoryFiles[directory] = tasks.Select(item => item.Result).ToArray();
        }