Small sitemap checker .aspx file
I think you can achieve the same with less code by utilizing some libraries and language features.
Google's Sitemap Protocol is not supported by default in the .NET Framework / Core.
But there are couple of packages which defines the corresponding C# classes, for example:

Google-Sitemap
X.Web.Sitemap

I have chosen the second one. So, the parsing logic would look like this:
public static async Task&lt;XDocument&gt; LoadSitemap(string filePath = &quot;./sitemap.xml&quot;)
{
    var sitemap = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
    return await XDocument.LoadAsync(sitemap, LoadOptions.None, CancellationToken.None);
}

public static Sitemap ParseSitemap(XDocument document)
{
    var serializer = new XmlSerializer(typeof(Sitemap));
    return (Sitemap) serializer.Deserialize(document.CreateReader());
}

The HEAD retrieval could be done by the following helper method:
private static readonly HttpClient client = new HttpClient();

private static async Task&lt;string&gt; GetHead(string location, 
    Func&lt;HttpResponseMessage, string&gt; successHandler, 
    Func&lt;Exception, string, string&gt; failureHandler)
{
    try
    {
        var timeoutPolicy = new CancellationTokenSource(5000);
        var request = new HttpRequestMessage(HttpMethod.Head, location);
        var response = await client.SendAsync(request, timeoutPolicy.Token);
        return successHandler(response);
    }
    catch (Exception ex)
    {
        return failureHandler(ex, location);
    }
}

The success and failure handlers can be implemented like this:
private static string HandleResponse(HttpResponseMessage response)
{
    var url = response.RequestMessage.RequestUri;
    return response.StatusCode == HttpStatusCode.OK 
        ? $&quot;{url} - OK&quot; 
        : $&quot;{url} - Status code: {response.StatusCode}&quot;;
}

private static string HandleError(Exception exception, string url)
{
    return exception switch
    { 
        HttpRequestException hre =&gt; $&quot;{url} - unreachable due to {hre.Message}&quot;,
        TaskCanceledException tce =&gt; $&quot;{url} - timed out due to {tce.Message}&quot;,
        _ =&gt; $&quot;{url} - failed due to {exception}&quot;
    };
}

Let's put all these pieces together:
static async Task Main(string[] args)
{
    var siteMapXml = await LoadSitemap();
    var siteMap = ParseSitemap(siteMapXml);

    var siteChecks = siteMap
        .Select(url =&gt; GetHead(url.Location, HandleResponse, HandleError))
        .ToList();

    await Task.WhenAll(siteChecks);

    foreach (var siteCheck in siteChecks)
    {
        Console.WriteLine(await siteCheck);   
    }

    Console.WriteLine(&quot;Finished&quot;);
}