/// <inheritdoc/>
        public async Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken))
        {
            token.ThrowIfCancellationRequested();

            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            await this.ConnectAsync();

            await this.cosmosContainer.UpsertItemAsync(
                partitionKey : new PartitionKey(key),
                item : CosmosCache.BuildCosmosCacheSession(
                    key,
                    value,
                    options),
                requestOptions : null,
                cancellationToken : token).ConfigureAwait(false);
        }
        /// <inheritdoc/>
        public async Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken))
        {
            token.ThrowIfCancellationRequested();

            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            await this.ConnectAsync(token).ConfigureAwait(false);

            ItemResponse <CosmosCacheSession> setCacheSessionResponse = await this.cosmosContainer.UpsertItemAsync(
                partitionKey : new PartitionKey(key),
                item : CosmosCache.BuildCosmosCacheSession(
                    key,
                    value,
                    options,
                    this.options),
                requestOptions : new ItemRequestOptions()
            {
                EnableContentResponseOnWrite = false,
            },
                cancellationToken : token).ConfigureAwait(false);

            this.options.DiagnosticsHandler?.Invoke(setCacheSessionResponse.Diagnostics);
        }