Как согласовать работу потоков с данными - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет, как можно согласовать разбор некоторого листы данных с помощью потока и отследить его выполнение? Вот, например, есть такой такая функция:
Листинг программы
  1. private void TestingWork(string user, string namethread)
  2. {
  3. Thread.Sleep(TimePause(4000, 6000)); // Рандом значения паузы
  4. OutputMsg(String.Format("Значение: {0} Поток: {1}", user, namethread));
  5. }
и есть такие вводные данные
Листинг программы
  1. List<string> users = new List<string> { "user1", "user2", "user3", "user4", "user5", "user6", "user7" };
Как можно написать функцию, которая создаст, например, 5 потоков и распределит по ним лист из пользователей например: 1-5 поток выведет 1-5 пользователя, а те, потоки, которые закончили работу раньше других - займутся 6-7 пользователем? (мои старые попытки написания такой функции либо вылетали, либо выводили несколько раз одного и того же пользователя) Извиняюсь, за незнание подобного, изучал c# поверхностно и прочитанные статьи\учебники не давали об этом информации, либо я ее не смог усвоить в свое время.

Решение задачи: «Как согласовать работу потоков с данными»

textual
Листинг программы
  1.          private void TestingWork(string user)
  2.          {
  3.             //тут совершается обработка юзера во вторичном потоке
  4.             {
  5.                //...
  6.                //...
  7.                //...
  8.                Thread.Sleep(TimePause(4000, 6000)); // Рандом значения паузы
  9.             }
  10.  
  11.             //а тут мы пробрасываем результат обработки обратно в первичный(интерфейсный) поток и выводим на экран(форму)
  12.             {
  13.                SynchronizationContext context = SynchronizationContext.Current;
  14.                context.Post(x =>
  15.                {
  16.                   OutputMsg(String.Format("Значение: {0}   Поток: {1}", user, Thread.CurrentThread.ManagedThreadId));
  17.                }, null);
  18.             }
  19.          }
  20.  
  21.          List<string> users = new List<string> { "user1", "user2", "user3", "user4", "user5", "user6", "user7" };
  22.  
  23.          ParallelOptions opt = new ParallelOptions();
  24.          opt.MaxDegreeOfParallelism = 5;
  25.          Task.Run(() => Parallel.ForEach(users, opt, TestingWork));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут