/// <summary>
        /// Determines whether the cache contains the specified experience identifier.
        /// </summary>
        /// <param name="experienceId">The experience identifier.</param>
        /// <returns>A <see cref="Task{System.Boolean}" /> containing true if the identifier is found; otherwise false.</returns>
        public async Task <bool> ContainsAsync(long experienceId)
        {
            await this.InitializeAsync();

            TableResult result = await this.experiencesCache.ExecuteAsync(TableOperation.Retrieve <ExperienceCacheEntity>((experienceId / CosmosExperienceCache.partitionSize).ToString(), experienceId.ToString()));

            ExperienceCacheEntity experienceEntity = result.Result as ExperienceCacheEntity;

            return(experienceEntity != null);
        }
        /// <summary>
        /// Sets the experience key asynchronously.
        /// </summary>
        /// <param name="experienceKey">The experience key.</param>
        /// <returns>An <see cref="Task{System.Int64}" /> representing the experience identifier.</returns>
        public async Task <string> SetExperienceKeyAsync(string experienceName, string experienceValues)
        {
            await this.InitializeAsync();

            ExperienceCacheEntity experienceEntity = new ExperienceCacheEntity(CosmosExperienceCache.partitionSize, experienceName)
            {
                ExperienceValues = experienceValues,
            };

            await this.experiencesCache.ExecuteAsync(TableOperation.InsertOrReplace(experienceEntity));

            return(experienceName);
        }
        /// <summary>
        /// Gets the experience key asynchronously.
        /// </summary>
        /// <param name="experienceId">The experience identifier.</param>
        /// <exception cref="KeyNotFoundException"></exception>
        /// <returns>The experience key.</returns>
        public async Task <string> GetExperienceKeyAsync(string experienceName)
        {
            await this.InitializeAsync();

            //TableResult result = await this.experiencesCache.ExecuteAsync(TableOperation.Retrieve<ExperienceCacheEntity>((experienceId / CosmosExperienceCache.partitionSize).ToString(), experienceId.ToString()));
            TableResult result = await this.experiencesCache.ExecuteAsync(TableOperation.Retrieve <ExperienceCacheEntity>("0", experienceName));

            ExperienceCacheEntity experienceEntity = result.Result as ExperienceCacheEntity;

            if (experienceEntity != null)
            {
                return(experienceEntity.ExperienceValues);
            }

            throw new KeyNotFoundException($"The {nameof(experienceName)} {experienceName} could not be found.");
        }
        /// <summary>
        /// Deletes the experience key asynchronously.
        /// </summary>
        /// <param name="experienceId">The experience identifier.</param>
        /// <exception cref="KeyNotFoundException"></exception>
        /// <returns>The experience key.</returns>
        public async Task <string> DeleteExperienceKeyAsync(string experienceName)
        {
            await this.InitializeAsync();

            ExperienceCacheEntity experienceCacheEntity = new ExperienceCacheEntity();

            experienceCacheEntity.RowKey       = experienceName;
            experienceCacheEntity.PartitionKey = "0";
            experienceCacheEntity.ETag         = "*";
            //TableResult result = await this.experiencesCache.ExecuteAsync(TableOperation.Retrieve<ExperienceCacheEntity>((experienceId / CosmosExperienceCache.partitionSize).ToString(), experienceId.ToString()));
            TableResult result = await this.experiencesCache.ExecuteAsync(TableOperation.Delete(experienceCacheEntity));

            ExperienceCacheEntity experienceEntity = result.Result as ExperienceCacheEntity;

            if (experienceEntity != null)
            {
                return(experienceName);
            }

            throw new KeyNotFoundException($"The {nameof(experienceName)} {experienceName} could not be found.");
        }