/// <inheritdoc />
        public Task PopulateAsync(TChunk chunk)
        {
            IAsyncChunkPopulatorContracts.PopulateAsync(chunk);

            this.populator.Populate(chunk);
            return(TaskUtilities.CompletedTask);
        }
        /// <inheritdoc />
        public async Task PopulateAsync(IVoxelGridChunk chunk)
        {
            IAsyncChunkPopulatorContracts.PopulateAsync(chunk);

            using (var mapPin = await this.chunkFactory.CreateAsync(chunk.Key.ToOverheadKey()).DontMarshallContext())
            {
                var min = chunk.VoxelsStageView.LowerBounds;
                var max = chunk.VoxelsStageView.UpperBounds;
                this.GenerateValues(mapPin.Value, min, max, chunk);
            }
        }
        /// <inheritdoc />
        public async Task PopulateAsync(ISkyIslandMapChunk chunk)
        {
            IAsyncChunkPopulatorContracts.PopulateAsync(chunk);

            var chunkEntity = await this.store.TryGetAsync(chunk.Key).DontMarshallContext();

            if (chunkEntity.HasValue)
            {
                this.persister.FromPersistable(chunkEntity.Value, chunk);
            }
            else
            {
                this.fallback.Populate(chunk);
            }
        }