public static List <Pais> ContextoSincronizacion(IList <IServicioPais> ListaPaises) { var contextoSincronizacion = new ContextoSincronizacion <Pais> { ColeccionConcurrenteSegura = new ConcurrentBag <Pais>(), TiempoEsperaAgotado = false, BloqueoLecturaEscritura = new ReaderWriterLock() }; Task.WaitAll( ListaPaises.Select(ta => Task.Factory.StartNew( () => Metodos.TareaObtenerPaises(ref contextoSincronizacion, ta), CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default)) .ToArray(), Timeout.Infinite); contextoSincronizacion.BloqueoLecturaEscritura.AcquireWriterLock(Timeout.Infinite); contextoSincronizacion.TiempoEsperaAgotado = true; contextoSincronizacion.BloqueoLecturaEscritura.ReleaseWriterLock(); return(contextoSincronizacion.ColeccionConcurrenteSegura.Distinct().ToList()); }
public static void TareaObtenerPaises(ref ContextoSincronizacion <Pais> contextoSincronizacion, IServicioPais servicioPais) { Console.WriteLine("ContextoSincronizacion----------Consultando: {0}", servicioPais.Nombre); var paises = servicioPais.ObtenerPais(); Console.WriteLine("ContextoSincronizacion----------Resultado de paises: {0}", arg0: paises.Count()); contextoSincronizacion.BloqueoLecturaEscritura.AcquireReaderLock(Timeout.Infinite); var tiempoEsperaAgotado = contextoSincronizacion.TiempoEsperaAgotado; contextoSincronizacion.BloqueoLecturaEscritura.ReleaseReaderLock(); if (!tiempoEsperaAgotado) { contextoSincronizacion.ColeccionConcurrenteSegura = contextoSincronizacion.ColeccionConcurrenteSegura.Concat(paises); } }