Почему Task начинает работу только после запуска всего List<Task>?
Сабж. Помогите разобраться в этой магии.
Есть такой класс.
public class ParserV2
{
private static SemaphoreSlim semaphore = new SemaphoreSlim(3);
private static HttpClient client = new HttpClient();
private Domain domain;
static ParserV2()
{
//Устанавливаем Заголовки
}
private async Task GetDomainAsync(){//Делаем GET запрос к апи}
private async Task CheckDomainAsync(){//Делаем проверку}
private async Task<string> UpdateBdDomainAsync(){//Делаем PUT запрос к апи}
//Метод которым запускаем все действия которые выше
public async Task Check(CancellationToken token)
{
if (!token.IsCancellationRequested)
{
semaphore.Wait();
do
{
await GetDomainAsync();
}
while (domain == null);
do
{
await CheckDomainAsync();
}
while (domain.CMS == null);
while(true)
{
var code = await UpdateBdDomainAsync();
if (code =="OK")
{
break;
}
}
Console.WriteLine("Поток освобожден");
semaphore.Release();
}
}
}
Main
у меня такой
CancellationTokenSource cts = new CancellationTokenSource();
List <ParserV2> parse = new List <ParserV2> ();
for (int i = 0; i < 20; i++)
{
parse.Add(new ParserV2());
}
List <Task> tasksParse = new List <Task> ();
foreach(var t in parse)
{
tasksParse.Add(new Task(() => t.Check(cts.Token)));
}
foreach (var t in tasksParse)
{
t.Start();
}
Проблема в том что задачи начинают выполнятся только после того как в foreach
всем сделает t.Start();
Я думал что таски которые я запускаю сразу будут выполнятся но это не так.
Как мне запускать таски по мере их запуска а не все сразу?