diff --git a/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs b/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs index b325fecf4..ed3a2d300 100644 --- a/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs +++ b/src/NzbDrone.Core/ImportLists/FetchAndParseImportListService.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using NLog; -using NzbDrone.Common.TPL; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.ImportLists @@ -41,10 +40,7 @@ namespace NzbDrone.Core.ImportLists _logger.Debug("Available import lists {0}", importLists.Count); - var taskList = new List(); - var taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.None); - - foreach (var importList in importLists) + Parallel.ForEach(importLists, new ParallelOptions { MaxDegreeOfParallelism = 5 }, importList => { var importListLocal = importList; var importListStatus = _importListStatusService.GetLastSyncListInfo(importListLocal.Definition.Id); @@ -56,35 +52,28 @@ namespace NzbDrone.Core.ImportLists if (DateTime.UtcNow < importListNextSync) { _logger.Trace("Skipping refresh of Import List {0} ({1}) due to minimum refresh interval. Next sync after {2}", importList.Name, importListLocal.Definition.Name, importListNextSync); - continue; + return; } } - var task = taskFactory.StartNew(() => - { - try - { - var importListReports = importListLocal.Fetch(); - - lock (result) - { - _logger.Debug("Found {0} reports from {1} ({2})", importListReports.Count, importList.Name, importListLocal.Definition.Name); - - result.AddRange(importListReports); - } + try + { + var importListReports = importListLocal.Fetch(); - _importListStatusService.UpdateListSyncStatus(importList.Definition.Id); - } - catch (Exception e) - { - _logger.Error(e, "Error during Import List Sync of {0} ({1})", importList.Name, importListLocal.Definition.Name); - } - }).LogExceptions(); + lock (result) + { + _logger.Debug("Found {0} reports from {1} ({2})", importListReports.Count, importList.Name, importListLocal.Definition.Name); - taskList.Add(task); - } + result.AddRange(importListReports); + } - Task.WaitAll(taskList.ToArray()); + _importListStatusService.UpdateListSyncStatus(importList.Definition.Id); + } + catch (Exception e) + { + _logger.Error(e, "Error during Import List Sync of {0} ({1})", importList.Name, importListLocal.Definition.Name); + } + }); result = result.DistinctBy(r => new { r.Author, r.Book }).ToList(); @@ -105,35 +94,25 @@ namespace NzbDrone.Core.ImportLists return result; } - var taskList = new List(); - var taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.None); - var importListLocal = importList; - var task = taskFactory.StartNew(() => + try { - try - { - var importListReports = importListLocal.Fetch(); - - lock (result) - { - _logger.Debug("Found {0} reports from {1} ({2})", importListReports.Count, importList.Name, importListLocal.Definition.Name); - - result.AddRange(importListReports); - } + var importListReports = importListLocal.Fetch(); - _importListStatusService.UpdateListSyncStatus(importList.Definition.Id); - } - catch (Exception e) + lock (result) { - _logger.Error(e, "Error during Import List Sync of {0} ({1})", importList.Name, importListLocal.Definition.Name); - } - }).LogExceptions(); + _logger.Debug("Found {0} reports from {1} ({2})", importListReports.Count, importList.Name, importListLocal.Definition.Name); - taskList.Add(task); + result.AddRange(importListReports); + } - Task.WaitAll(taskList.ToArray()); + _importListStatusService.UpdateListSyncStatus(importList.Definition.Id); + } + catch (Exception e) + { + _logger.Error(e, "Error during Import List Sync of {0} ({1})", importList.Name, importListLocal.Definition.Name); + } result = result.DistinctBy(r => new { r.Author, r.Book }).ToList();