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)); }