private void DoWork(object state)
        {
            var e          = new EnumerateWebAPI(api);
            var actionList = e.CreateActionList();

            if (!string.IsNullOrWhiteSpace(InternalSiteUrl))
            {
                actionList.ForEach(it => it.Site = InternalSiteUrl);
            }

            blocklyFileGeneratorWebAPI       = new BlocklyFileGenerator(actionList);
            BlocklyTypesDefinition           = blocklyFileGeneratorWebAPI.GenerateNewBlocklyTypesDefinition();
            BlocklyAPIFunctions              = blocklyFileGeneratorWebAPI.GenerateBlocklyAPIFunctions();
            BlocklyToolBoxValueDefinition    = blocklyFileGeneratorWebAPI.GenerateBlocklyToolBoxValueDefinitionFile();
            BlocklyToolBoxFunctionDefinition = blocklyFileGeneratorWebAPI.GenerateBlocklyToolBoxFunctionDefinitionFile();
            if (app == null)
            {
                return;
            }
            var serverAddresses = app.ServerFeatures.Get <IServerAddressesFeature>();

            if ((serverAddresses?.Addresses?.Count() ?? 0) == 0)
            {
                return;
            }

            lock (this)
            {
                var Host = "";
                if (odataLater.Count > 0 || graphQLLater.Count > 0)
                {
                    _timer.Dispose();

                    foreach (var item in serverAddresses.Addresses)
                    {
                        if (item.StartsWith("https"))
                        {
                            Host = item;
                        }
                        if (Host.Length == 0)
                        {
                            Host = item;
                        }
                    }
                    Host = Host.Replace("0.0.0.0", "localhost");
                    Host = Host.Replace("[::]", "localhost");
                }
                if (odataLater.Count > 0)
                {
                    foreach (var item in odataLater)
                    {
                        var b = new UriBuilder(Host);
                        b.Path = item;
                        var x = AddOdata(item.Replace("/", ""), b.Uri.ToString(), true);
                        x.GetAwaiter().GetResult();
                    }
                    odataLater.Clear();
                    this._ODataBlocklyAPIFunctions = null;
                    this._ODataBlocklyToolBoxFunctionDefinition = null;
                    this._ODataBlocklyTypesDefinition           = null;
                    this._ODataBlocklyToolBoxValueDefinition    = null;
                }
                if (graphQLLater.Count > 0)
                {
                    foreach (var item in graphQLLater)
                    {
                        var uri = new UriBuilder(Host);
                        uri.Path = item.Value;
                        InterpretSchemaGraphQl(item.Key, uri.Uri);
                    }
                }
                _timer.Dispose();
            }
        }