public async Task UpdateEntriesAsync()
        {
            await EnsureInitializedAsync();

            // Update the cache with a new state and then refresh entries as it would be done on a next request.
            await LocalizationStateManager.UpdateAsync(new LocalizationStateDocument(), afterUpdateAsync : RefreshEntriesAsync);
        }
        protected virtual async Task InitializeEntriesAsync()
        {
            if (_initialized)
            {
                return;
            }

            await _semaphore.WaitAsync();

            try
            {
                if (!_initialized)
                {
                    var state = await LocalizationStateManager.GetOrCreateImmutableAsync();

                    var indexes = await Session.QueryIndex <LocalizedContentItemIndex>(i => i.Published).ListAsync();

                    AddEntries(indexes.Select(i => new LocalizationEntry
                    {
                        ContentItemId   = i.ContentItemId,
                        LocalizationSet = i.LocalizationSet,
                        Culture         = i.Culture.ToLowerInvariant()
                    }));

                    _lastIndexId     = indexes.LastOrDefault()?.Id ?? 0;
                    _stateIdentifier = state.Identifier;

                    _initialized = true;
                }
            }
            finally
            {
                _semaphore.Release();
            }
        }
        private async Task EnsureInitializedAsync()
        {
            if (!_initialized)
            {
                await InitializeEntriesAsync();
            }
            else
            {
                var state = await LocalizationStateManager.GetOrCreateImmutableAsync();

                if (_stateIdentifier != state.Identifier)
                {
                    await RefreshEntriesAsync(state);
                }
            }
        }