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();
}