public void Process(IEnumerable<FileSystemWatcherEventArgs> watchArgs) { IEnumerable<IGrouping<string, FileSystemWatcherEventArgs>> groupedFileModifications = watchArgs .GroupBy(this.GetKey) .Select(p => p); IList<Task> jobs = new List<Task>(); foreach (var fileModifications in groupedFileModifications) { _logger.Trace("[Start]: File processing {0}", fileModifications.Key); var operationBatch = new OperationBatch(fileModifications.Key, fileModifications.ToList()); IFileOperationManager operationManager = _fileOperationManagerFactory.Invoke(); Task task = operationManager.ProcessFileOperations(operationBatch); jobs.Add(task); } try { Task.WaitAll(jobs.ToArray()); } catch (AggregateException ex) { for (int i = 0; i < ex.InnerExceptions.Count; ++i) { _logger.Error(ex.InnerExceptions[i]); } } }
public async Task PerformSynchronization() { foreach (var file in Directory.EnumerateFiles(_sourcePath)) { _logger.Trace("[Start]: Synchronization '{0}'", file); FileSystemWatcherEventArgs args = this.CreateArgs(file); IFileOperationManager fileOperationManager = _fileOperationManagerFactory.Invoke(); var operationBatch = new OperationBatch(file, new List<FileSystemWatcherEventArgs> {args}); try { await fileOperationManager.ProcessFileOperations(operationBatch); } catch (Exception ex) { _logger.Error(ex); } finally { _logger.Trace("[End]: Synchronization '{0}'", file); } } }