List передача аргументов - C#
Формулировка задачи:
Привет! Имею проблему с передачей аргументов в метод thr
Собственно создаю и запускаю таски так:
В итоге все таски имеют одинаковый аргумент на входе (последний созданный infos, один и тот же для всех!). Почему так? как исправить?
Листинг программы
- 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();
Решение задачи: «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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д