public override RedialResult Redial() { if (Skip) { return(RedialResult.Skip); } if (Zk.Exists(_lockerFilePath, false) != null) { while (true) { Thread.Sleep(50); if (Zk.Exists(_lockerFilePath, false) == null) { return(RedialResult.OtherRedialed); } } } else { try { using (var zk = ZookeeperUtil.GetShortSessionZk(120)) { zk.Create(_lockerFilePath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.Ephemeral); // wait all operation stop. Thread.Sleep(5000); Logger.Warn("Wait atomic action to finish..."); AtomicExecutor.WaitAtomicAction(); Logger.Warn("Try to redial network..."); RedialInternet(); Logger.Warn("Redial finished."); return(RedialResult.Sucess); } } catch (IOException) { // 有极小可能同时调用File.Open时抛出异常 return(Redial()); } catch (Exception) { return(RedialResult.Failed); } } }
public override RedialResult Redial() { if (Skip) { return(RedialResult.Skip); } var redialSetting = GetRedialStatus(); if (RunningRedialStatus != redialSetting) { while (true) { Thread.Sleep(50); var redialSetting1 = GetRedialStatus(); if (redialSetting1 == RunningRedialStatus) { return(RedialResult.OtherRedialed); } } } else { SetRedialStatus(DialingRedialStatus); // wait all operation stop. Thread.Sleep(5000); AtomicExecutor.WaitAtomicAction(); Logger.Warn("Try to redial network..."); RedialInternet(); SetRedialStatus(RunningRedialStatus); Logger.Warn("Redial finished."); return(RedialResult.Sucess); } }
public override RedialResult Redial() { if (Skip) { return(RedialResult.Skip); } ClearTimeoutLocker(); if (Redis.HashExists(GetSetKey(), Locker)) { while (true) { Thread.Sleep(50); if (!Redis.HashExists(GetSetKey(), Locker)) { return(RedialResult.OtherRedialed); } } } else { Redis.HashSet(GetSetKey(), Locker, DateTime.Now.ToString("yyyy-MM-dd HH:mm")); // wait all operation stop. Thread.Sleep(5000); AtomicExecutor.WaitAtomicAction(); Logger?.Warn("Try to redial network..."); RedialInternet(); Redis.HashDelete(GetSetKey(), Locker); Logger?.Warn("Redial finished."); return(RedialResult.Sucess); } }
public override RedialResult Redial() { if (Skip) { return(RedialResult.Skip); } if (File.Exists(_lockerFilePath)) { while (true) { Thread.Sleep(50); if (!File.Exists(_lockerFilePath)) { return(RedialResult.OtherRedialed); } } } else { Stream stream = null; try { stream = File.Open(_lockerFilePath, FileMode.Create, FileAccess.Write); // wait all operation stop. Thread.Sleep(5000); Logger.Warn("Wait atomic action to finish..."); // 等待数据库等操作完成 AtomicExecutor.WaitAtomicAction(); Logger.Warn("Try to redial network..."); RedialInternet(); Logger.Warn("Redial finished."); return(RedialResult.Sucess); } catch (IOException) { // 有极小可能同时调用File.Open时抛出异常 return(Redial()); } catch (Exception) { return(RedialResult.Failed); } finally { #if !NET_CORE stream?.Close(); #else stream?.Dispose(); #endif File.Delete(_lockerFilePath); } } }