/// <summary>
        /// Synchronously waits and retrieves metadata server contents.
        /// </summary>
        /// <returns>The deserialized contents of the metadata server.</returns>
        public static MetadataJson GetMetadata()
        {
            ResetEtag();
            PrintWebException = true;
            string metadata;

            do
            {
                metadata = GetMetadataUpdate().Result;
            }while (string.IsNullOrEmpty(metadata));
            return(MetadataDeserializer.DeserializeMetadata <MetadataJson>(metadata));
        }
        /// <summary>
        /// Wait for metadata changes until cancellation is requested.
        /// </summary>
        private static async void WatchMetadata()
        {
            while (!Token.IsCancellationRequested)
            {
                string metadata = await GetMetadataUpdate();

                // Check if the response from deserialize is null.
                if (!string.IsNullOrEmpty(metadata))
                {
                    MetadataJson metadataJson = MetadataDeserializer.DeserializeMetadata <MetadataJson>(metadata);
                    ActivateMetadataUpdate(metadataJson);
                }
            }
        }