using System.Collections; using System.Collections.Generic; using System.Linq; using Developpez.Dotnet.Threading; namespace Developpez.Dotnet.Collections { public static partial class EnumerableExtensions { /// /// Obtient une version synchronisée de la liste /// /// Type générique de la liste /// liste /// liste synchronisée public static IList Synchronized(this IList list) { return new SyncList(list); } #region ForEachParallel /// /// Exécute la méthode callback de manière parallele sur tous les éléments /// de la collection /// /// Type de collection /// Séquence d'éléments sur laquelle effectuer une action en parallèle /// Méthode à rappeller sur chacun des éléments public static void ForEachParallel(this IEnumerable enumerable, ThreadedWorker.CallBackMethod callback) { enumerable.ForEachParallel(callback, true); } /// /// Exécute la méthode callback de manière parallele sur tous les éléments /// de la collection /// /// Type de collection /// Séquence d'éléments sur laquelle effectuer une action en parallèle /// Méthode à rappeller sur chacun des éléments /// True si l'opération doit être synchrone (attente de la fin de l'opération sur tous les éléments) /// ou non (aucune attente, l'exécution se poursuit) public static void ForEachParallel(this IEnumerable enumerable, ThreadedWorker.CallBackMethod callback, bool waitForCompletion) { enumerable.ForEachParallel(callback, waitForCompletion, -1); } /// /// Exécute la méthode callback de manière parallele sur tous les éléments /// de la collection /// /// Type de collection /// Séquence d'éléments sur laquelle effectuer une action en parallèle /// Méthode à rappeller sur chacun des éléments /// True si l'opération doit être synchrone (attente de la fin de l'opération sur tous les éléments) /// ou non (aucune attente, l'exécution se poursuit) /// Nombre maximum de thread de travail dédié à cette tâche. Toute valeure inférieure à 1 est ignorée public static void ForEachParallel(this IEnumerable enumerable, ThreadedWorker.CallBackMethod callback, bool waitForCompletion, int maxWorkerThreads) { callback.CheckArgumentNull("callback"); using (ThreadedWorker worker = new ThreadedWorker()) { if (maxWorkerThreads > 0) worker.MaxThreadCount = maxWorkerThreads; worker.ForEach(enumerable, callback, waitForCompletion); } } /// /// Exécute la méthode callback de manière parallele sur tous les éléments /// de la collection /// /// Séquence d'éléments sur laquelle effectuer une action en parallèle /// Méthode à rappeller sur chacun des éléments public static void ForEachParallel(this IEnumerable enumerable, ThreadedWorker.CallBackMethod callback) { enumerable.ForEachParallel(callback, true); } /// /// Exécute la méthode callback de manière parallele sur tous les éléments /// de la collection /// /// Séquence d'éléments sur laquelle effectuer une action en parallèle /// Méthode à rappeller sur chacun des éléments /// True si l'opération doit être synchrone (attente de la fin de l'opération sur tous les éléments) /// ou non (aucune attente, l'exécution se poursuit) public static void ForEachParallel(this IEnumerable enumerable, ThreadedWorker.CallBackMethod callback, bool waitForCompletion) { enumerable.ForEachParallel(callback, waitForCompletion, -1); } /// /// Exécute la méthode callback de manière parallele sur tous les éléments /// de la collection /// /// Séquence d'éléments sur laquelle effectuer une action en parallèle /// Méthode à rappeller sur chacun des éléments /// True si l'opération doit être synchrone (attente de la fin de l'opération sur tous les éléments) /// ou non (aucune attente, l'exécution se poursuit) /// Nombre maximum de thread de travail dédié à cette tâche. Toute valeure inférieure à 1 est ignorée public static void ForEachParallel(this IEnumerable enumerable, ThreadedWorker.CallBackMethod callback, bool waitForCompletion, int maxWorkerThreads) { callback.CheckArgumentNull("callback"); using (ThreadedWorker worker = new ThreadedWorker()) { if (maxWorkerThreads > 0) worker.MaxThreadCount = maxWorkerThreads; worker.ForEach(enumerable.Cast(), callback, waitForCompletion); } } #endregion } }