private async Task <ConcurrentBag <FileValue> > Calculate(ConcurrentBag <string> dirPaths) { return(await Task.Run(() => { try { fileReader = new FilesHandlerLittle(); fileReader.ProcessNotifier += Main_ProcessEventNotifier; fileReader.FileCompleteNotifier += Main_FileCompleteNotifier; var a = fileReader.CalculateParallel(dirPaths); return a.Result; } catch (Exception e) { if (e.InnerException is StopException) { throw e.InnerException; } throw e; } finally { fileReader.ProcessNotifier -= Main_ProcessEventNotifier; fileReader.FileCompleteNotifier -= Main_FileCompleteNotifier; fileReader = null; dirPaths = new ConcurrentBag <string>(); GC.Collect(); } })); }