/// <summary> /// Execute une action internet avec retour, avec plusieurs tentative /// </summary> public T Run <T>(Func <T> iAction) { if (RuntimeConfiguration.GetRuntimeConfiguration() == Tools.Enums.RuntimeConfEnum.Release) { int tryInternetCount = 1; int tryCount = 1; while (true == true) { Notifier.ThrowIfCancellationRequested(); try { return(iAction()); } catch (Exception ex) { if (Notifier.IsCanceled) { throw; } if (tryCount <= _retries) { Uri theUri = null; if (_SiteUrl != null) { theUri = new Uri(_SiteUrl); } if (new WebQuery(Notifier, false, false).IsInternetConnected(theUri) == false) { if (_SiteUrl != null) { MyDebug.PrintError(" => site '{0}' indisponible => tentative : {1}".FormatString(_SiteUrl, tryInternetCount), ex); } else { MyDebug.PrintError(" => Internet indisponible => tentative : {0}".FormatString(tryInternetCount), ex); } new SleepWithStopCheck(Notifier).RunSecond(INTERNETSECONDWAITINGTIME); tryInternetCount += 1; } else { MyDebug.PrintError(" => Internet disponible mais chargement impossible => tentative : " + tryCount, ex); new SleepWithStopCheck(Notifier).RunSecond(_sleep); tryCount += 1; } } else { return(default(T)); } } } } else { return(iAction()); } }