У меня есть движок с произвольным количеством опросов, каждый из которых выполняет свой «опрос» каждые несколько секунд. Я хочу, чтобы опросчики выполнялись в разных потоках, но каждый «опрос» внутри одного опросчика должен быть последовательным, чтобы один происходил за другим. Все работает с использованием этого кода для запуска процесса опроса:
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+, то столкнулся со странным поведением. Трое из опросов будут работать, один просто проведет один опрос, а остальные не будут опрашивать вообще. Совершенно очевидно, что мои задачи выполняются долго. В конце концов, они выполняют всю мою программу. Но я не понимаю, почему я могу вести себя плохо без этой опции. Любая помощь будет принята с благодарностью.