/// <summary>
        ///     Persist the task metadata cache to disk.
        /// </summary>
        public void PersistTaskMetadataCache()
        {
            if (!TaskMetadataCache.IsDirty)
            {
                return; // Nothing new to persist.
            }
            if (!TaskMetadataCacheFile.Directory.Exists)
            {
                ExtensionDataDirectory.Create();
            }

            TaskMetadataCache.Save(TaskMetadataCacheFile.FullName);
        }
        /// <summary>
        ///     Attempt to restore the task metadata cache from persisted state.
        /// </summary>
        /// <returns>
        ///     <c>true</c>, if the task metadata cache was restored from persisted state; otherwise, <c>false</c>.
        /// </returns>
        public bool RestoreTaskMetadataCache()
        {
            if (!TaskMetadataCacheFile.Exists)
            {
                return(false);
            }

            try
            {
                TaskMetadataCache.Load(TaskMetadataCacheFile.FullName);

                return(true);
            }
            catch (Exception cacheLoadError)
            {
                Log.Error(cacheLoadError, "An unexpected error occurred while restoring the task metadata cache.");

                return(false);
            }
        }