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

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

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

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

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

textual
Листинг программы
        private static Action WrapAction(Action<object> action, object param)
        {
            return new Action(() => { action(param); });
        }       
 
        static void Main(string[] args)
        {
            var infos = new List<string> {"Мама", "Мыла", "Раму"};
            var actions = new List<Action>();
            for (int i = 0; i < infos.Count; i++)
            {
                actions.Add(WrapAction( (param) =>  {Console.WriteLine( infos[(int)param]);}, i));
            }
            Parallel.Invoke(actions.ToArray());
            Console.ReadKey();
      }

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


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

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

15   голосов , оценка 4.133 из 5
Похожие ответы