Отдельный список процессов для каждого потока - C#
Формулировка задачи:
Здравствуйте, есть глобальный list и функции
как сделать чтобы для разных site создавался отдельный list? прошу проещения если непонятно, задайте наводящий вопрос, не знаю как по другому объяснить((
Получается так, что этот лист используется всеми потоками которые запрашивают fuse и соответственно ждут пока у потока который вызвал раньше завершатся запущенные процессы.
List<Process> _runningProcs = new List<Process>(20); private void WaitForFreeSlot() //ждем освобождения места в списке процессов { process = Convert.ToInt32(textBox4.Text); for (; ; ) { for (int i = _runningProcs.Count - 1; i >= 0; i--) { if (_runningProcs[i].HasExited) { _runningProcs[i].Dispose(); _runningProcs.RemoveAt(i); } } if (_runningProcs.Count >= process) { Thread.Sleep(1000); continue; } else break; } Thread.Sleep(4000); } public void fuse(String site) { WaitForFreeSlot(); System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", win + command); System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo = procStartInfo; proc.Start(); _runningProcs.Add(proc); }
Решение задачи: «Отдельный список процессов для каждого потока»
textual
Листинг программы
var process = _runningProcs[site]; while(true) { var tasks = process.Select((p, i) => Task.Run(() => { p.WaitForExit(); p.Dispose(); process[i] = new Process();//add new process })).ToArray(); Task.WaitAny(tasks); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д