永不结束Thread vs Task

时间:2013-05-27 10:08:11

标签: c# .net multithreading task-parallel-library

我有一个应用程序每隔x秒轮询一些设备, 我的实现基于每个设备的一个线程。

每个线程都以这种方式实现

while(true){
    stopWatch.Start();
    //dowork
    stopWatch.Stop();
    time = (int)(delay - stopWatch.ElapsedMilliseconds);
    stopWatch.Reset();
    sleep(time);
}

现在这是正确的方法,还是我应该实现一个每x秒启动一次的Timer并创建一个新任务?

PS:每个设备都有轮询代码

2 个答案:

答案 0 :(得分:1)

使用循环的线程对您来说不那么有用,并且会产生更清晰的代码。所以我建议你这样做。

如果您有许多线程或需要节省资源,请使用定时器或异步休眠(Task.Delay + async/await)。

答案 1 :(得分:0)

使用在民意调查之间休眠的单个线程似乎是执行此操作的最佳方式。它将在睡眠后轮询所需的设备。由于您正在执行一个可能永远不会结束的重复任务,直到程序结束,我不认为使用任务确实适合这种情况,即使可以使用它。