public void UpdateAvailableUsers()
        {
            lock (AvailableUsersSyncRoot)
            {
                var defaultSectionName = SettingsFile.DefaultSectionName;
                var userLogins         = SettingsFile.GetSections()
                                         .Where(userLogin =>
                                                userLogin != defaultSectionName)
                                         .OrderBy(
                    login => login,
                    StringComparer.Ordinal)
                                         .ToArray();
                var users = new Dictionary <string, User>(userLogins.Length);

                foreach (var login in userLogins)
                {
                    try
                    {
                        var    token          = GetUserToken(login);
                        string rocketPassword = string.Empty;

                        Task.Run(async() =>
                        {
                            try
                            {
                                rocketPassword = GetUserRocketPassword(login);

                                if (string.IsNullOrEmpty(rocketPassword))
                                {
                                    var result = await UserApi.GetRocketPassword(
                                        token)
                                                 .ConfigureAwait(false);

                                    if (!result.IsError &&
                                        result.Data != null)
                                    {
                                        rocketPassword = result.Data.Password;
                                        SetUserRocketPassword(login, rocketPassword);
                                    }
                                    else
                                    {
                                        rocketPassword = string.Empty;
                                        SetUserRocketPassword(login, rocketPassword);
                                    }
                                }
                            }
                            catch (CryptographicException)
                            {
                                rocketPassword = string.Empty;
                                SetUserRocketPassword(login, rocketPassword);
                            }
                            catch (FormatException)
                            {
                                rocketPassword = string.Empty;
                                SetUserRocketPassword(login, rocketPassword);
                            }
                        });

                        users.Add(
                            login,
                            new User(
                                login,
                                token,
                                GetUserId(login),
                                rocketPassword,
                                UserStoreType.Permanent));
                    }
                    catch (CryptographicException)
                    {
                        RemoveUser(login, false);
                    }
                    catch (FormatException)
                    {
                        RemoveUser(login, false);
                    }
                }

                var oldAvailableUsers = AvailableUsers;
                AvailableUsers = new ReadOnlyDictionary <string, User>(users);

                AvailableUsersChanged?.Invoke(this,
                                              new AvailableUsersChangedEventArgs(oldAvailableUsers, AvailableUsers));
            }
        }