public async Task <CleanupResult> Cleanup(
            IEnumerable <PathInfo> cleanupPaths)
        {
            var result = new CleanupResult();

            var cleanupTasks = cleanupPaths
                               .ToList()
                               .Select(x => Task.Run(
                                           () => Cleanup(x, result)));

            await Task.WhenAll(cleanupTasks);

            await _mediator.Publish(new CleanupCompleted(result));

            return(result);
        }
        private void Cleanup(PathInfo cleanupPath, CleanupResult result)
        {
            try
            {
                var movePath = _movingHelper.Move(cleanupPath);

                _deletionHelper.Delete(movePath);

                result.AddSuccess(cleanupPath, movePath);

                _mediator.Publish(new CleanupSuccess(cleanupPath, movePath));
            }
            catch (Exception ex)
            {
                result.AddError(cleanupPath, ex);

                _mediator.Publish(new CleanupError(cleanupPath, ex));
            }
        }