public static void DoEratosfen(int maxNumber)
        {
            Eratosfen d = new Eratosfen(maxNumber);

            using (StreamWriter sw = new StreamWriter(@"E:\Универ\ООП\Лабы\Eratosfen.txt", false, Encoding.UTF8))
            {
                foreach (int n in d.Simple)
                {
                    sw.Write($"{n} ");
                }
            }
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            Task taskEratosfen = new Task(() => Eratosfen.DoEratosfen(89546));

            Console.WriteLine($"Задача выполняется.Состояние: { taskEratosfen.Status} ");
            Stopwatch stopwatch = Stopwatch.StartNew();

            taskEratosfen.Start();
            Task openFile = taskEratosfen.ContinueWith(Pros);

            while (!taskEratosfen.IsCompleted)
            {
                Console.WriteLine($"Задача выполняется.Состояние: { taskEratosfen.Status} ");
                Thread.Sleep(5500);
            }
            if (taskEratosfen.IsCompleted)
            {
                Console.WriteLine($"Задача не выполняется. Состояние: { taskEratosfen.Status}. Прошло времени: {stopwatch.ElapsedMilliseconds} ");
            }
            Console.ReadKey();
            CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
            CancellationToken       cancelToken       = cancelTokenSource.Token;
            Task taskWithTokenCancel = new Task(() => Pros(cancelToken));

            stopwatch.Restart();
            taskWithTokenCancel.Start();
            if (stopwatch.ElapsedMilliseconds > 10000)
            {
                cancelTokenSource.Cancel();
                if (cancelToken.IsCancellationRequested)
                {
                    Console.WriteLine("Token cancel request");
                }
            }
            taskWithTokenCancel.Wait();
            Console.WriteLine($"Время выполнения {stopwatch.ElapsedMilliseconds}");
            stopwatch.Reset();
            Task <float> t1 = new Task <float>(() => 3.14f * 23);                                                                             //Действия-рандом на своё усмотрение
            Task <int>   t2 = new Task <int>(() => 23 * 16 * 5);
            Task <long>  t3 = new Task <long>(() => 232333 * 5553);

            t1.Start();
            t2.Start();
            t3.Start();

            Task.WaitAll(t1, t2, t3);//все 3 задачи выполняются в параллельном режиме(асинхронно) и все их возвращаемые значения используются в следующей задаче
            // Запускаем 4 задачу когда завершаттся все 3 предыдущие
            Task <int> t4 = new Task <int>(() => (int)(t3.Result / (t2.Result * t1.Result)));

            t4.Start();
            Console.WriteLine($"Задание 3: {t4.Result}");
            Random          random = new Random();
            Func <int, int> f      = (a) => a + random.Next(3, 32);        //Делегат, который прибавляет к числу пользователя рандомное число из промежутка
            Task <int>      fun    = new Task <int>(() => f(1));           //Делегат выполняется в задаче
            Task <int>      fun1   = fun.ContinueWith((a) => f(a.Result)); //При окончании задачи, возвращаемое значение переходит как параметр в делегат сл задачи

            fun.Start();
            Task.WaitAny(fun1);
            Console.WriteLine($"Task1: {fun.Result} task2: {fun1.Result}");

            Task <int> fun11 = new Task <int>(() => f(1));

            fun11.Start();

            while (true)
            {
                if (fun11.GetAwaiter().IsCompleted)
                {
                    new Task(() => Console.WriteLine($"Task1: {fun11.GetAwaiter().GetResult()} Task2: Comleted")).Start();
                    break;
                }
            }

            iArr = new int[1000];
            for (int i = 0; i < 1000; ++i)
            {
                iArr[i] = random.Next(0, 1232);
            }
            stopwatch.Start();
            int elem;
            IEnumerable <int> arr = iArr.Select(n => n);

            Parallel.For(0, 1000, (i) => elem = arr.ElementAt(i) / (2));
            Console.WriteLine($"Parallel For сработал за: {stopwatch.ElapsedMilliseconds}");
            stopwatch.Restart();
            Parallel.ForEach <int>(arr, (n) => elem = n / 2);
            Console.WriteLine($"Parallel Foreach сработал за: {stopwatch.ElapsedMilliseconds}");

            //Quicksort(0, 999);
            //foreach(int i in iArr)
            //{                                               //массив на экран(занимает много места)
            //    Console.Write($" {i}");
            //}
            SmthFunc(1000, 1005);


            // Не разбирайся что выводит на экран здесь, здесь...
            //Task7
            BlockingCollection <int> appliances = new BlockingCollection <int>();
            Thread thpr = new Thread(() => AllTaskProv());

            thpr.Start();
            Thread thcus = new Thread(() => AllTaskCust());

            thcus.Start();
            void AllTaskProv()
            {
                Task.Run(() => Producer(ref appliances, 500, 1));
                Task.Run(() => Producer(ref appliances, 900, 2));
                Task.Run(() => Producer(ref appliances, 200, 3));
                Task.Run(() => Producer(ref appliances, 700, 4));
                Task.Run(() => Producer(ref appliances, 1000, 5));
            }

            void AllTaskCust()
            {
                Task.Run(() => Customer(ref appliances, 1000));
                Task.Run(() => Customer(ref appliances, 1500));
                Task.Run(() => Customer(ref appliances, 3000));
                Task.Run(() => Customer(ref appliances, 500));
                Task.Run(() => Customer(ref appliances, 4000));
                Task.Run(() => Customer(ref appliances, 2334));
                Task.Run(() => Customer(ref appliances, 987));
                Task.Run(() => Customer(ref appliances, 4323));
                Task.Run(() => Customer(ref appliances, 2112));
                Task.Run(() => Customer(ref appliances, 6000));
            }

            Console.ReadKey();
        }