Inheritance: ConcurrentDictionary
        // Tries to load Function Maps from local folder
        private static async Task<FunctionMapsMap> GetFunctionMapsFromFolderAsync(string folderName)
        {
            var result = new FunctionMapsMap();

            string binFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            string functionMapsFolder = Path.Combine(binFolder, "..", folderName, Globals.FunctionMapFolderName);

            if (!Directory.Exists(functionMapsFolder))
            {
                return result;
            }

            foreach(var filePath in Directory.EnumerateFiles(functionMapsFolder, $"{Globals.FunctionMapFilePrefix}*.json"))
            {
                var nameParts = Path.GetFileName(filePath).Split('.');
                if (nameParts.Length < 2)
                {
                    continue;
                }

                string taskHubName = nameParts.Length > 2 ? nameParts[1] : string.Empty;
                string json = await File.ReadAllTextAsync(filePath);

                result.TryAdd(taskHubName, json);
            }

            return result;
        }
        // Tries to load Function Maps from underlying Azure Storage
        private static async Task<FunctionMapsMap> GetFunctionMapsFromStorageAsync()
        {
            var result = new FunctionMapsMap();
            try
            {
                string connectionString = Environment.GetEnvironmentVariable(EnvVariableNames.AzureWebJobsStorage);
                var blobClient = CloudStorageAccount.Parse(connectionString).CreateCloudBlobClient();

                // Listing all blobs in durable-functions-monitor/function-maps folder
                var container = blobClient.GetContainerReference(Globals.TemplateContainerName);

                string functionMapFolderName = Globals.FunctionMapFolderName + "/";
                var fileNames = await container.ListBlobsAsync(functionMapFolderName);

                // Loading blobs in parallel
                await Task.WhenAll(fileNames.Select(async templateName =>
                {
                    var blob = await blobClient.GetBlobReferenceFromServerAsync(templateName.Uri);

                    // Expecting the blob name to be like "dfm-function-map.[TaskHubName].json" or just "dfm-function-map.json"
                    var nameParts = blob.Name.Substring(functionMapFolderName.Length).Split('.');
                    if (nameParts.Length < 2 || nameParts.First() != Globals.FunctionMapFilePrefix || nameParts.Last() != "json")
                    {
                        return;
                    }

                    string taskHubName = nameParts.Length > 2 ? nameParts[1] : string.Empty;

                    using (var stream = new MemoryStream())
                    {
                        await blob.DownloadToStreamAsync(stream);
                        string templateText = Encoding.UTF8.GetString(stream.ToArray());

                        result.TryAdd(taskHubName, templateText);
                    }
                }));
            } 
            catch (Exception)
            {
                // Intentionally swallowing all exceptions here
            }
            return result;
        }