Как согласовать работу потоков с данными - 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));