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