Task t = Task.Run(() => PullHTTP(LocalURL)); Task.WaitAll(tasks.ToArray()); never returns

public static void ProcessFSD()
{
    // Dim book = New LinqToExcel.ExcelQueryFactory(System.IO.Path.GetFileName(fileName))
    FileStream fs = File.Open(Directory.GetCurrentDirectory() + "\\images.xlsx", FileMode.Open);
    IExcelDataReader edr = ExcelReaderFactory.CreateOpenXmlReader(fs);
    edr.IsFirstRowAsColumnNames = true;
    DataSet r = edr.AsDataSet();
    var RangeObject = Partitioner.Create(0, r.Tables[0].Rows.Count);
    Parallel.ForEach(RangeObject, (range, loopState) =>
    {
        // Loop over each range element without a delegate invocation.
        for (int i = range.Item1; i < range.Item2; i++)
        {
            DownloadData(r.Tables[0].Rows[i][0].ToString(), r.Tables[0].Rows[i][2].ToString());
        }
    });
 }
static void DownloadData(string name, string url)
{
    WebClient wc = new WebClient();
    try
    {

        byte[] response = wc.DownloadData(url);
        string sContentType = wc.ResponseHeaders.Get("Content-Type");
        if (sContentType.Length > 0)
        {
            string sImage = sContentType.Split('/')[0].ToLower();
            string sImageType = sContentType.Split('/')[1].ToLower();
            string sFileExtension = string.Empty;
            if (sImage.Equals("image") || sImage.Equals("text"))
            {
                switch (sImageType)
                {
                    case "jpeg":
                        sFileExtension = ".jpg";
                        break;
                    case "png":
                        sFileExtension = ".png";
                        break;
                    case "bmp":
                        sFileExtension = ".bmp";
                        break;
                    case "gif":
                        sFileExtension = ".gif";
                        break;
                    case "tiff":
                        sFileExtension = ".Tiff";
                        break;
                    case "html":
                        sFileExtension = ".html";
                        break;
                    default:
                        sFileExtension = ".jpg";
                        break;
                }
                var sFolder = Directory.GetCurrentDirectory() + "\\Image";
                using (FileStream Fi = new FileStream(sFolder + "\\" + name + "_" + sFileExtension, FileMode.OpenOrCreate))
                {
                    Fi.Write(response, 0, response.Length);
                    Fi.Flush();
                    Fi.Close();
                }
            }
        }
        wc = null;
    }
    catch (Exception ex)
    {
        Console.WriteLine("Trying Http Method:" + name + " " + url + Environment.NewLine);
        HttpRequestImages(name, url);
    }
}

static void HttpRequestImages(string name, string url)
{
    System.Threading.Thread.Sleep(5000);
    try
    {
        int i = 0;
        if (url.Contains("sync"))
        {
            url.Replace(@"dwn", @"img");
        }
        HttpWebRequest wc = WebRequest.CreateHttp(url);
        wc.AllowAutoRedirect = false;
        HttpWebResponse response = (HttpWebResponse)wc.GetResponse();
        if ((int)response.StatusCode >= 300 && (int)response.StatusCode <= 399)
        {
            string newUrl = response.ResponseUri.ToString();
            wc = (HttpWebRequest)WebRequest.Create(newUrl);
            response = (HttpWebResponse)wc.GetResponse();
        }

        string fileName = response.Headers["Content-Disposition"] != null ?
            response.Headers["Content-Disposition"].Replace("attachment; filename=", "").Replace("\"", "") :
            response.Headers["Location"] != null ? Path.GetFileName(response.Headers["Location"]) :
            Path.GetFileName(url).Contains('?') || Path.GetFileName(url).Contains('=') ?
            Path.GetFileName(response.ResponseUri.ToString()) : "img" + i.ToString() + ".png";
        int newfn = fileName.IndexOf(";");
        if (newfn > 0)
        {
            fileName = fileName.Substring(0, fileName.IndexOf(";"));
            fileName = Uri.UnescapeDataString(fileName);
        }
        string ext = Path.GetExtension(fileName);
        fileName = Directory.GetCurrentDirectory() + "\\Image\\" + name + ext;
        using (Stream inputStream = response.GetResponseStream())
        {
            using (Stream outputStream = File.Create(fileName))
            {
                byte[] buffer = new byte[4096];
                int bytesRead;
                do
                {
                    bytesRead = inputStream.Read(buffer, 0, buffer.Length);
                    outputStream.Write(buffer, 0, bytesRead);

                } while (bytesRead != 0);
            }
        }

        response.Dispose();
        wc = null;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message + Environment.NewLine + name + " " + url + Environment.NewLine);
    }
}
/r/csharp Thread