Здравствуйте, хочу советов по решению задачи. После вью на работе дали задание на C# с многопоточностью, работа с файлом

Вот само задание: Задание: Работа со структурами (коллекциями) данных в C#

Описание задачи: требуется реализовать механизм обработки входного произвольного текста. Механизм должен принимать и обрабатывать текст в многопоточном режиме, должен выполнять следующие методы обработки:

  • определить все повторяющиеся слова и количество повторений этих слов;
  • определить алфавит текста;
  • замена порядка слов на обратный.

Выбор метода обработки определяется входным параметром, отправляемым вместе с текстом.

Требования к реализации: должны быть задействованы, максимально возможно, стандартные структуры данных (коллекции), такие как List, Dictionary, Stack, Queue и т. д. Должна быть соблюдена точная синхронизация доступа к данным. Прием и вывод результатов не должен влиять на выполнение метода обработки. Реализация всего механизма должна быть в виде отдельного класса или группы классов, желательно в отдельной сборке.

Тестирование: должно проводиться двумя способами: разовое ручное и автоматический тест в многопоточном режиме с выводом результатов на некотором объёме входных данных.

Три эти метода я за пол ночи написал (хотя до этого c# не изучал, только с++ и java). дальше надо использовать потоки, но я не могу понять как их применить и алгоритм решения задачи не могу ясно представить. Прочитал несколько глав про потоки на https://metanit.com/sharp/tutorial/5.4.php, но это не помогло. Буду рад если подскажете алгоритм решения задачи, или в какую сторону двигаться (я начинающий). Спасибо Код , который я сам написал:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleAppProm
{
    class Program
    {
        //static Mutex mutexObj = new Mutex();

        static void Main(string[] args)
        { 
            Thread thread1 = new Thread(new ThreadStart(CountRepeatWordsInText));
            thread1.Start();

            Thread thread2 = new Thread(new ThreadStart(FindAlphabet));
            thread2.Start();
            
            Thread thread3 = new Thread(new ThreadStart(InverseString));
            thread3.Start();
            Console.ReadKey(true);
        }

        public static void CountRepeatWordsInText()
        {
            string path = @"d:\Tatiana\Documents\task_fromPromis\Задание.txt";
            if (path.Equals(null))
                {
                    throw new ArgumentNullException();
                }
                string line;
                if (File.Exists(path))
                {
                    StreamReader file = null;
                    try
                    {
                        file = new StreamReader(path, Encoding.Default);
                        while ((line = file.ReadToEnd()) != null)
                        {
                            string[] words = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                            var result = words.GroupBy(x => x)//Группируем слова-элементы массива
                                              .Where(x => x.Count() > 1)//Фильтруем из них только те группы, количество элементов в которых больше 1
                                              .Select(x => new { Word = x.Key, Frequency = x.Count() });//Представляем результаты в виде перечисления анонимного типа

                        foreach (var item in result)
                            {
                                Console.WriteLine("Слово: {0}\tКоличество повторов: {1}", item.Word, item.Frequency);
                            }
                        }
                    }
                    finally
                    {
                        if (file != null)
                            file.Close();
                    }
                }

        }

        public static void FindAlphabet()
        {
            string path = @"d:\Tatiana\Documents\task_fromPromis\Задание.txt";
                if (path.Equals(null))
                {
                    throw new ArgumentNullException();
                }
                var charCount = 0;
                using (var reader = new StreamReader(path, detectEncodingFromByteOrderMarks: true))
                {
                    while (reader.Read() > -1)
                    {
                        charCount++;
                    }
                }
                if (File.Exists(path))
                {
                    StreamReader file = null;
                    try
                    {
                        file = new StreamReader(path, Encoding.Default);
                        char[] chars = new char[charCount];
                        while ((chars = file.ReadToEnd().ToCharArray()) != null)
                        {
                            var distinct = new List<char>();
                            var list = new List<char>();
                            foreach (char ch in chars)
                            {
                                if (Char.IsLetter(ch))
                                    list.Add(Char.ToUpper(ch));
                                list.Sort();
                                distinct = list.Distinct().ToList();
                            }
                            foreach (var dist in distinct)
                            {
                                Console.Write(dist + ", ");
                            }
                        }
                    }
                    finally
                    {
                        if (file != null)
                            file.Close();
                    }
                }
        }

        public static void InverseString()
        {
            string path = @"d:\Tatiana\Documents\task_fromPromis\Задание.txt";
                if (path.Equals(null))
                {
                    throw new ArgumentNullException();
                }
                string line;
                if (File.Exists(path))
                {
                    StreamReader file = null;
                    try
                    {
                        file = new StreamReader(path, Encoding.Default);
                        while ((line = file.ReadToEnd()) != null)
                        {
                            string[] words = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                            for (int i = words.Length - 1; i >= 0; i--)
                            {
                                Console.Write(words[i] + " ");
                            }
                        }
                    }
                    finally
                    {
                        if (file != null)
                        {
                            file.Close();
                        }
                    }
                }
            
        }
        

    }


}


Ответы (0 шт):