Странное поведение, когда я не использую TaskCreationOptions.LongRunning

У меня есть движок с произвольным количеством опросов, каждый из которых выполняет свой «опрос» каждые несколько секунд. Я хочу, чтобы опросчики выполнялись в разных потоках, но каждый «опрос» внутри одного опросчика должен быть последовательным, чтобы один происходил за другим. Все работает с использованием этого кода для запуска процесса опроса:

    public void StartPolling()
    {
        Stopwatch watch = new Stopwatch();
        while (Engine.IsRunning)
        {
            Task task = Task.Factory.StartNew(() =>{
                watch.Restart();
                Poll();
                watch.Stop();
            },TaskCreationOptions.LongRunning);
            task.Wait();
            if(Frequency > watch.Elapsed) Thread.Sleep(Frequency - watch.Elapsed);
        }
    }

Однако мне потребовалось некоторое время, чтобы обнаружить TaskCreationOptions. Без этой опции, если я запускаю тест, который создает 1-3 таких опросчика, все работает нормально. Если я создал 4+, то столкнулся со странным поведением. Трое из опросов будут работать, один просто проведет один опрос, а остальные не будут опрашивать вообще. Совершенно очевидно, что мои задачи выполняются долго. В конце концов, они выполняют всю мою программу. Но я не понимаю, почему я могу вести себя плохо без этой опции. Любая помощь будет принята с благодарностью.

5
задан Jeremy Foster 14 March 2011 в 05:58
поделиться