private void ReplicarAmbitos(List <DbSyncScopeDescription> Ambitos, ParametrosReplica parameters) //int timeOut, uint tamañoDeCache)
        {
            _replicationSemaphore = new Semaphore(parameters.HilosParaReplicar, parameters.HilosParaReplicar);
            foreach (DbSyncScopeDescription ambito in Ambitos)
            {
                try
                {
                    _replicationSemaphore.WaitOne();
                    Loguear("Inicia thread para replicar el ambito: " + ambito.ScopeName);
                    Thread t = new Thread(() =>
                    {
                        StartReplicationOfOneScope(parameters, ambito);
                    });
                    HilosEnEjecucion.Add(t);
                    t.Start();
                }
                catch (Exception error)
                {
                    Loguear("Error al ejecutar el hilo de replicar el ambito: " + ambito.ScopeName + " Error: " + error.ToString());
                }
            }

            var threadCount = 1;

            while (threadCount > 0)
            {
                Thread.Sleep(500);
                threadCount = HilosEnEjecucion.FindAll(x => x.IsAlive).Count;
            }
        }
        private void MantenerAprovisionamientoDeAmbitosEnHilos(ParametrosReplica parametros, string esquemaMetadataSyncFramework, string prefijoMetadataSyncFramework, List <DbSyncScopeDescription> Ambitos)
        {
            if (!(parametros.DesaprovisionarAmbitosEnServidorLocal || parametros.AprovisionarAmbitosEnServidorLocal || parametros.DesaprovisionarAmbitosEnServidorRemoto || parametros.AprovisionarAmbitosEnServidorRemoto))
            {
                return;
            }
            _semaphore = new Semaphore(parametros.HilosParaAprovisionar, parametros.HilosParaAprovisionar);

            foreach (DbSyncScopeDescription ambito in Ambitos)
            {
                DbSyncScopeDescription LocalAmbito = ambito;

                Thread t = new Thread(() =>
                {
                    MantenerAprovisionamientoDeAmbitos(parametros, esquemaMetadataSyncFramework, prefijoMetadataSyncFramework, LocalAmbito);
                });
                HilosEnEjecucion.Add(t);
                t.Start();
            }

            var threadCount = 1;

            while (threadCount > 0)
            {
                Thread.Sleep(500);
                threadCount = HilosEnEjecucion.FindAll(x => x.IsAlive).Count;
            }
        }