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; } }