Как согласовать работу потоков с данными - C#
Формулировка задачи:
Всем привет, как можно согласовать разбор некоторого листы данных с помощью потока и отследить его выполнение?
Вот, например, есть такой такая функция:
и есть такие вводные данные
Как можно написать функцию, которая создаст, например, 5 потоков и распределит по ним лист из пользователей
например:
1-5 поток выведет 1-5 пользователя, а те, потоки, которые закончили работу раньше других - займутся 6-7 пользователем?
(мои старые попытки написания такой функции либо вылетали, либо выводили несколько раз одного и того же пользователя)
Извиняюсь, за незнание подобного, изучал c# поверхностно и прочитанные статьи\учебники не давали об этом информации, либо я ее не смог усвоить в свое время.
private void TestingWork(string user, string namethread) { Thread.Sleep(TimePause(4000, 6000)); // Рандом значения паузы OutputMsg(String.Format("Значение: {0} Поток: {1}", user, namethread)); }
List<string> users = new List<string> { "user1", "user2", "user3", "user4", "user5", "user6", "user7" };
Решение задачи: «Как согласовать работу потоков с данными»
textual
Листинг программы
private void TestingWork(string user) { //тут совершается обработка юзера во вторичном потоке { //... //... //... Thread.Sleep(TimePause(4000, 6000)); // Рандом значения паузы } //а тут мы пробрасываем результат обработки обратно в первичный(интерфейсный) поток и выводим на экран(форму) { SynchronizationContext context = SynchronizationContext.Current; context.Post(x => { OutputMsg(String.Format("Значение: {0} Поток: {1}", user, Thread.CurrentThread.ManagedThreadId)); }, null); } } List<string> users = new List<string> { "user1", "user2", "user3", "user4", "user5", "user6", "user7" }; ParallelOptions opt = new ParallelOptions(); opt.MaxDegreeOfParallelism = 5; Task.Run(() => Parallel.ForEach(users, opt, TestingWork));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д