Beispiel #1
0
 /// <summary>
 /// Starts a background operation to check for new Remote Settings and apply them.
 /// </summary>
 public void Start()
 {
     RequiresNotDisposed();
     if (!isStarted)
     {
         if (isUpdateDisabled())
         {
             StartTask = Task.FromResult(false);
         }
         else
         {
             List <Task <GroupedRemoteSettings> > tasks = new List <Task <GroupedRemoteSettings> >();
             foreach (IRemoteSettingsProvider allRemoteSettingsProvider in AllRemoteSettingsProviders)
             {
                 tasks.Add(allRemoteSettingsProvider.Start());
             }
             StartTask = Task.Run(async delegate
             {
                 await logger.Start().ConfigureAwait(false);
                 IEnumerable <GroupedRemoteSettings> source = (await Task.WhenAll(tasks).ConfigureAwait(false)).Where((GroupedRemoteSettings x) => x != null);
                 if ((nonScopedStorageHandler != null || logger.LoggingEnabled) && source.Any())
                 {
                     GroupedRemoteSettings groupedRemoteSettings = source.Reverse().Aggregate(delegate(GroupedRemoteSettings a, GroupedRemoteSettings b)
                     {
                         a.Merge(b, logger);
                         return(a);
                     });
                     logger.LogVerbose("Merged settings", groupedRemoteSettings);
                     if (nonScopedStorageHandler != null)
                     {
                         using (Mutex mutex = new Mutex(false, "Global\\A7B8B64E-AEB3-4053-BC8C-C187F5320352"))
                         {
                             try
                             {
                                 mutex.WaitOne(-1, false);
                             }
                             catch (AbandonedMutexException)
                             {
                             }
                             try
                             {
                                 nonScopedStorageHandler.DeleteAllSettings();
                                 nonScopedStorageHandler.SaveNonScopedSettings(groupedRemoteSettings);
                             }
                             catch
                             {
                             }
                             finally
                             {
                                 mutex.ReleaseMutex();
                             }
                         }
                     }
                 }
                 OnRemoteSettingsApplied();
             });
         }
         isStarted = true;
     }
 }