Начал изучать работу с Task в C#, т.к. есть у меня задача, где в цикле делаются достаточно длительные запросы через Web API к сторонним сервисам, а потом результаты заносятся в базу данных. Хотел распараллелить выполнение этих запросов через Tasks, но оказалось не все так просто. Даже простейшая тестовая задача по передаче параметров в Task поставила в тупик.
static void Main(string[] args)
{
List<Task> tasks = new List<Task>();
Console.WriteLine("Start");
for (int i = 0; i < 3; i++)
{
tasks.Add(Task.Run(() => printIdx(i)));
}
Console.WriteLine("Begin waiting");
Task.WaitAll(tasks.ToArray());
Console.WriteLine("End waiting");
}
static void printIdx(int j)
{
Console.WriteLine(j + "\tstart");
System.Threading.Thread.Sleep(500);
Console.WriteLine(j + "\tend");
}
Результат выполнения такой:
Start
Begin waiting
3 start
3 start
3 end
3 start
3 end
3 end
End waiting
Получается, что фактическая передача значения параметра происходит уже после окончания цикла. Подскажите, как правильно передавать параметры в таком случае?
Сделайте копию вашей переменной
for (int i = 0; i < 3; i++)
{
var t = i;
tasks.Add(Task.Run(() => printIdx(t)));
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть некий код банкомата, где пользователю необходимо сначала ввести свой ид
Мне нужно сделать массив который хранит данные, знаю что можно сделать так
Здравствуйте, в woocommerce никак не могу найти способа работы с плагином без аутентификации (только get запросы нужны), возможно ли как-то напрямую...