private void GetPartial(IEnumerable <string> directories, CancellationToken token) { try { var tasks = directories.Select(directory => { return(Task.Factory.StartNew(() => { token.ThrowIfCancellationRequested(); try { foreach (var file in _fileAbstraction.EnumerateFilesInDirectory(directory)) { token.ThrowIfCancellationRequested(); ResultCollection.Add(file); } } catch (UnauthorizedAccessException e) { Console.WriteLine(e); } GetPartial(_fileAbstraction.EnumerateTopDirectories(directory), token); })); }); var task = Task.WhenAll(tasks); task.GetAwaiter().GetResult(); } catch (UnauthorizedAccessException e) { Console.WriteLine(e); } }