【发布时间】:2011-07-14 19:04:19
【问题描述】:
我有一个引擎,它有任意数量的轮询器,每个轮询器每隔几秒进行一次“轮询”。我希望轮询器在不同的线程中运行,但是单个轮询器中的每个“轮询”应该是顺序的,以便一个在下一个之后发生。一切都在使用此代码启动轮询过程:
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+,那么我会遇到奇怪的行为。三个轮询器可以工作,一个只执行一个轮询,其余的则根本不会进行轮询。 我的任务长期运行是完全有道理的。毕竟他们正在运行我的程序的整个长度。但我不明白为什么没有设置这个选项我会得到一些不好的行为。任何帮助将不胜感激。
【问题讨论】:
标签: c# multithreading c#-4.0 task-parallel-library