Please assist and review the following task. 
There are many geographic data to be found using the Bing Map server. It is necessary to collect data, parse bing response and store it in one of two files, depending on the result. I need to make it parallel as it could a lot of data. I do not like how I parallel the code, so I would be particularly grateful to the comments on the improvements.
Below is code 
using Newtonsoft.Json;
using System;  
using System.IO; 
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Collections;
using System.Diagnostics;
namespace BingGeoLocations
{
class Program
{
    private static string _folder = @"D:\TempFolder\";
    private static object _consoleLock = new object();
    private static object _successfileLock = new object();
    private static object _failurefileLock = new object();
    static void Main(string[] args)
    {
        var successGeoLocationCount = 0;
        var failedGeoLocationCount = 0;
        var allLocations = GetDocumentLocations().ToList();
        var allLocationsCount = allLocations.Count();
        var timer = new Stopwatch();
        timer.Start();
        var reportLocker = new object();
        Parallel.For(0, allLocations.Count,
            (i) =>
            {
                try
                {
                    var bingLocations = GetBingLocations(allLocations[i]);
                    Interlocked.Increment(ref successGeoLocationCount);
                    StoreSuccessResults(allLocations[i], bingLocations);
                }
                catch (Exception ex)
                {
                    Interlocked.Increment(ref failedGeoLocationCount);
                    StoreFailure(allLocations[i], ex.Message);
                }
                lock (reportLocker)
                {
                    Console.SetCursorPosition(0, Console.CursorTop);
                    Console.Write($"Processed {successGeoLocationCount + failedGeoLocationCount} locations out of { allLocationsCount}. Successful - {successGeoLocationCount}. Failed - {failedGeoLocationCount}");
                }
            });
        timer.Stop();
        Console.WriteLine();
        Console.WriteLine($"Total execution time - {timer.ElapsedMilliseconds}.");
        Console.ReadLine();
    }
    private static void StoreFailure(string docLocation, string failureDescription)
    {
        var failureFileName = "geography_failed.txt";
        if (docLocation != null)
        {
            var newInfo = new StringBuilder();
            newInfo.AppendLine(String.Join(";", new string[] { docLocation, failureDescription }));
            lock (_failurefileLock)
            {
                using (StreamWriter writer = File.AppendText(_folder + failureFileName))
                {
                    writer.Write(newInfo.ToString());
                }
            }
        }
    }
    private static void StoreSuccessResults(string docLocation, IEnumerable<BingLocation> bingLocations)
    {
        var successFileName = "geography_success.txt";
        if (docLocation != null && bingLocations != null && bingLocations.Count() > 0)
        {
            var newInfo = new StringBuilder();
            foreach (BingLocation bingLoc in bingLocations)
            {
                newInfo.AppendLine(String.Join(";", new string[] {
                    docLocation, bingLoc.CountryRegion, bingLoc.AdminDistrict, bingLoc.AdminDistrict2 }));
            }
            lock (_successfileLock)
            {
                using (StreamWriter writer = File.AppendText(_folder + successFileName))
                {
                    writer.Write(newInfo.ToString());
                }
            }
        }
    }
    static IEnumerable<string> GetDocumentLocations()
    {
        var fileName = "geography.txt";
        return File.ReadAllLines(fileName).Where(s => !String.IsNullOrWhiteSpace(s));
    }
    static IEnumerable<BingLocation> GetBingLocations(string docLocation)
    {
        var result = new List<BingLocation>();
        var bingKey = "MySecretBingKey";
        using (HttpClient client = new HttpClient())
        {
            var response = client.GetStringAsync("http://dev.virtualearth.net/REST/v1/Locations?q=" + Uri.EscapeDataString(docLocation) + "&c=en-US&maxResults=10&key=" + bingKey).Result;
            dynamic responseObject = JsonConvert.DeserializeObject(response);
            var statusCode = responseObject.statusCode;
            if (statusCode != "200")
            {
                throw new Exception("Status code is not 200.");
            }
            var highConfidenceResources = ((IEnumerable)responseObject.resourceSets[0].resources).Cast<dynamic>().Where(p => p.confidence.ToString().ToUpper() == "HIGH").ToList();
            if (highConfidenceResources.Count == 0)
            {
                throw new Exception("There are not High Confident results.");
            }
            foreach (dynamic res in highConfidenceResources)
            {
                var bingLocation = new BingLocation();
                bingLocation.AdminDistrict = res.address.adminDistrict;
                bingLocation.CountryRegion = res.address.countryRegion;
                if (res.address.adminDistrict2 != null)
                {
                    bingLocation.AdminDistrict2 = res.address.adminDistrict2;
                }
                else
                {
                    bingLocation.AdminDistrict2 = res.address.locality;
                }
                result.Add(bingLocation);
            }
        }
        return result;
    }
}
}
public class BingLocation
{
    public string CountryRegion;
    public string AdminDistrict;
    public string AdminDistrict2;
}