Tasks/timer - C#

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

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

Есть несколько операций такого типа
 new Thread(() => {
                for (;;) {
                    Thread.Sleep(111);
 
                    if (cond) {
                        Thread.Sleep(1111);
                    }
 
                    if (cond2) {
                        //do smth
                    }
                }
            });
которые должны бесконечно параллельно выполняться, при этом новая итерация не должна быть начата пока не завершится старая (всевозможные таймеры отпали, или как то можно внутри таймера сделать задержку?). Поскольку этих операций могут быть десятки, то использовать под каждую отдельный поток считаю не рациональным (ну должен же быть нормальный способ?)

Решение задачи: «Tasks/timer»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication9 {
    class Program {
        static void Main(string[] args) {
            Task.Run(() => Foo(10));
            Console.ReadLine();
        }
        static async void Foo(int taskCount) {
            int delay = 1000;
            while (true) {
                Console.WriteLine("***** Starting new block *****");
                for (int i = 0; i < taskCount; i++) {
                    int index = i;
                    await Run(delay, index);
                }
            }
        }
        static async Task Run(int delay, int taskIndex) {
            Console.WriteLine("Do some operation, index is: {0}", taskIndex);
            await Task.Delay(delay);
        }
    }
}

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


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

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

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