コード例 #1
0
        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());
        }
コード例 #2
0
        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);
            }
        }