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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д