List передача аргументов - C#

Узнай цену своей работы

Формулировка задачи:

Привет! Имею проблему с передачей аргументов в метод thr
Листинг программы
  1. public List<info> infos = new List<info>();
  2. public List<Task> tasks = new List<Task>();
  3. static void thr(object inf)
  4. { ...Здесь куча вычислений и их результаты записываются в inf... }
Собственно создаю и запускаю таски так:
Листинг программы
  1. tasks.Add(new Task(() => { thr(infos[infos.Count - 1]); }));
  2. tasks[tasks.Count - 1].Start();
В итоге все таски имеют одинаковый аргумент на входе (последний созданный infos, один и тот же для всех!). Почему так? как исправить?

Решение задачи: «List передача аргументов»

textual
Листинг программы
  1.         private static Action WrapAction(Action<object> action, object param)
  2.         {
  3.             return new Action(() => { action(param); });
  4.         }      
  5.  
  6.         static void Main(string[] args)
  7.         {
  8.             var infos = new List<string> {"Мама", "Мыла", "Раму"};
  9.             var actions = new List<Action>();
  10.             for (int i = 0; i < infos.Count; i++)
  11.             {
  12.                 actions.Add(WrapAction( (param) =>  {Console.WriteLine( infos[(int)param]);}, i));
  13.             }
  14.             Parallel.Invoke(actions.ToArray());
  15.             Console.ReadKey();
  16.       }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы