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);
        }
    }
}

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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