Либо зависает поток, либо пишет, что доступ к этому файлу заблокирован другим потоком. Хотя этого быть не может, т.к я использую using
Там проектик не большой, который я постоянно использую для разных парсингов сайта. Поэтому код может быть грязноватый.
Можете сами посмотреть, просто создав папку Work на диске C
https://github.com/gokor8/Portak/tree/master
Я знаю, что бесполезно закрывать поток в using но сделал на всякий случай, для проверки.
Ошибку выдает в классе HttpClient в методах Download.
Вот так это выглядит, когда он виснет

Класс в котором ошибка
public static class HttpClass
{
public static readonly string FirstPathLink;
static int NumberImage = 0;
public static readonly string SiteName;
public static CookieContainer CookieContainer;
private static HttpClientHandler handler;
public static HttpClient Client;
private static IConfiguration config;
public static IBrowsingContext Context;
static HttpClass()
{
CookieContainer = new CookieContainer();
handler = new HttpClientHandler() { CookieContainer = CookieContainer };
Client = new HttpClient(handler)
{
Timeout = TimeSpan.FromMinutes(3),
BaseAddress = new Uri("https://www.arrex.it/en/")
};
config = Configuration.Default;
Context = BrowsingContext.New(config); //Client.Timeout = TimeSpan.FromMinutes(30);
Client.DefaultRequestHeaders.Add("User-Agent", "Calam");
SiteName = Cutter.Tram(Client.BaseAddress.Host.Replace(".", "").Replace(",", "") + 1);
FirstPathLink = "https://" + Client.BaseAddress.Host + "/";
}
public static async Task<string> Download(string link)
{
string image = link;
string konec1 = image.Substring(image.LastIndexOf("."), image.Length - image.LastIndexOf("."));
if (!image.Contains("http"))
image = FirstPathLink + image;
Directory.CreateDirectory($@"C:\Work\{SiteName}\" + ExcelContainer.NA);
string gg = "";
var sourceStream = await Client.GetStreamAsync(new Uri(image));
using (var targetStream = File.Create($@"C:\Work\{SiteName}\" + ExcelContainer.NA + @"\" + NumberImage + konec1))
{
await sourceStream.CopyToAsync(targetStream);
}
gg = $"/upload/staff/upload/staff/{SiteName}/" + ExcelContainer.NA + "/" + NumberImage + konec1 + ";\r\n";
NumberImage++;
return gg;
}
public static async Task<string> Download(string link, string konec1)
{
string image = link;
if (!image.Contains("http"))
image = FirstPathLink + image;
Directory.CreateDirectory($@"C:\Work\{SiteName}\" + ExcelContainer.NA);
string gg = "";
var sourceStream = await Client.GetStreamAsync(new Uri(image));
using (var targetStream = File.Create($@"C:\Work\{SiteName}\" + ExcelContainer.NA + @"\" + NumberImage + konec1))
{
await sourceStream.CopyToAsync(targetStream);
}
gg = $"/upload/staff/upload/staff/{SiteName}/" + ExcelContainer.NA + "/" + NumberImage + konec1 + ";\r\n";
NumberImage++;
return gg;
}
}

var sourceStream = await Client.GetStreamAsync(new Uri(image)); using (var targetStream = File.Create($@"C:\Work\{SiteName}\" + ExcelContainer.NA + @"\" + NumberImage + konec1)) { await sourceStream.CopyToAsync(targetStream); targetStream.Close(); }– Gorge Flow Nov 10 '21 at 22:32$интерполяции, но не использовать её? Можно так, коротко и ясно:$@"C:\Work\{SiteName}\{ExcelContainer.NA}\{NumberImage}{konec1}"– Alexander Petrov Nov 11 '21 at 01:01targetStream.Close();не нужно делать, у вас жеusing- вы в курсе, как оно работает? – aepot Nov 11 '21 at 01:21Path.Combineи за счет него избавиться от этой каши с конкатенацией строк для путей. – aepot Nov 11 '21 at 07:03HttpClass.Downloadбезawait. Статическое полеNumberImage, которое используется для имени файла, инкрементируется++без всяких блокировок. Возможно, в результате этого имя файла в разных тасках оказывается одинаковым. – Alexander Petrov Nov 11 '21 at 07:08