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