async Task FetchRequiredDataAsync(DataProviderProgression progression)
        {
            if (progression.HasMissingData())
            {
                EntityLoadingState entityState = progression.RemainingEntities.Span[0];
                int offset = entityState.Loaded;
                var entityDataContainer = GetEntityDataContainer(entityState.Entity.Id);

                var batchArray = await GetBatchAsync(entityState, offset);

                while (batchArray.Length > 0 && offset < entityState.Entity.Total)
                {
                    entityDataContainer.Append(batchArray);
                    offset     += batchArray.Length;
                    progression = progression.Update(batchArray.Length);

                    batchArray = await GetBatchAsync(entityState, offset);
                }
                entityDataContainer.CompleteLoading();

                await FetchRequiredDataAsync(progression.StartNextEntity());
            }
        }
 async void StartProviderLoading(IProgress <int> progress, ReadOnlyMemory <EntityLoadingState> entities)
 {
     await FetchRequiredDataAsync(DataProviderProgression.Create(progress, entities));
 }