static void Main(string[] args)
        {
            try
            {
                if ((args == null) || (args.Length == 0))
                {
                    System.Console.WriteLine("Please pass the first argument as DB connection string in the format Server=PG_HOST;Port=PG_PORT;Database=PG_DB;User Id=PG_USER;Password=PG_PASS");
                    Environment.Exit(-1);
                }

                _connectionstring = args.First();

                System.Console.WriteLine($"Using DB connection string: {_connectionstring}");

                int numberOfGoes = 1;

                if (args.Length > 1)
                {
                    int.TryParse(args.Skip(1).First(), out numberOfGoes);
                }

                _ldapQueries        = GetLdapQueries();
                _spineConfiguration = GetSpineConfiguration();

                System.Console.WriteLine($"Running {numberOfGoes} iteration(s).");
                RunLdapQueries(numberOfGoes);
            }
            catch (InterThreadException e)
            {
                System.Console.WriteLine($"An InterThreadException has occurred: {e}");
                throw;
            }
            catch (LdapException e)
            {
                System.Console.WriteLine($"An LdapException has occurred: {e}");
                throw;
            }
            catch (Exception e)
            {
                System.Console.WriteLine($"An Exception has occurred: {e}");
                throw;
            }
        }
        private static void ExecuteParallelRoutine(string[] args)
        {
            _connectionstring   = args.First();
            _ldapQueries        = GetLdapQueries();
            _spineConfiguration = GetSpineConfiguration();

            System.Console.WriteLine($"Using DB connection string: {_connectionstring}");

            var providerCodes = new List <string> {
                "A20047", "X26", "J82132", "B82619", "B82617", "B82614", "RR8", "G82809", "RYEA3", "G82796", "G82719", "RX8", "M84040", "B85033"
            };
            var consumerCodes = new List <string> {
                "A20047", "X26", "J82132", "B82619", "B82617", "B82614", "RR8", "G82809", "RYEA3", "G82796", "G82719", "RX8", "M84040", "B85033"
            };

            var stopWatch = new Stopwatch();

            stopWatch.Start();
            var providerOrganisationResults = RunParallel <Organisation>(providerCodes, "GetOrganisationDetailsByOdsCode");
            var consumerOrganisationResults = RunParallel <Organisation>(consumerCodes, "GetOrganisationDetailsByOdsCode");
            var providerEndpointResults     = RunParallel <Spine>(providerCodes, "GetGpProviderEndpointAndPartyKeyByOdsCode");
            var consumerEndpointResults     = RunParallel <Spine>(consumerCodes, "GetGpProviderEndpointAndPartyKeyByOdsCode");
            var capabilityStatementResults  = RunParallelAPICall(providerCodes, "GetGpProviderAsIdByOdsCodeAndPartyKey");

            stopWatch.Stop();

            System.Console.WriteLine("Provider Organisation Details");
            System.Console.WriteLine("=============================");

            for (var i = 0; i < providerOrganisationResults.Count; i++)
            {
                System.Console.WriteLine($"[{i + 1}] {providerOrganisationResults[i]?.OdsCode} {providerOrganisationResults[i]?.OrganisationTypeCode} {providerOrganisationResults[i]?.OrganisationName} {providerOrganisationResults[i]?.PostalAddress} {providerOrganisationResults[i]?.PostalCode}");
            }

            System.Console.WriteLine("Consumer Organisation Details");
            System.Console.WriteLine("=============================");

            for (var i = 0; i < consumerOrganisationResults.Count; i++)
            {
                System.Console.WriteLine($"[{i + 1}] {consumerOrganisationResults[i]?.OdsCode} {consumerOrganisationResults[i]?.OrganisationTypeCode} {consumerOrganisationResults[i]?.OrganisationName} {consumerOrganisationResults[i]?.PostalAddress} {consumerOrganisationResults[i]?.PostalCode}");
            }

            System.Console.WriteLine("Provider Endpoint Details");
            System.Console.WriteLine("=========================");

            for (var i = 0; i < providerEndpointResults.Count; i++)
            {
                System.Console.WriteLine($"[{i + 1}] {providerEndpointResults[i]?.AsId} {providerEndpointResults[i]?.SspHostname}");
            }

            System.Console.WriteLine("Consumer Endpoint Details");
            System.Console.WriteLine("=========================");

            for (var i = 0; i < consumerEndpointResults.Count; i++)
            {
                System.Console.WriteLine($"[{i + 1}] {consumerEndpointResults[i]?.AsId} {consumerEndpointResults[i]?.SspHostname}");
            }

            System.Console.WriteLine("Capability Statement Details");
            System.Console.WriteLine("============================");

            for (var i = 0; i < capabilityStatementResults.Count; i++)
            {
                System.Console.WriteLine($"[{i + 1}] {capabilityStatementResults[i]?.Name} {capabilityStatementResults[i]?.Description} {capabilityStatementResults[i]?.ResourceType}");
            }

            System.Console.WriteLine($"{providerCodes.Count + consumerCodes.Count} ODS code(s) took {stopWatch.Elapsed.TotalSeconds} seconds");
        }