控制工作线程超时。 Windows服务

时间:2014-07-02 07:09:35

标签: c# .net multithreading

想象一下,您需要从远程服务器获取数据。检索Worker thread每30分钟启动一次N partitions of data

private Int32 timeout = 60000*30;

public void Start() {
    this.workerThread = new Thread(this.ImportDocuments);
    this.finishedEvent = new AutoResetEvent(false);
    this.workerThread.Start();
}

// ...

while(!this.finishedEvent.WaitOne(timeout)) {
    // fetch/analyze/process data
}

如果严格定义配额,比如每次通话150 documents,我应该真的使用timeout吗?工作线程会在没有定义超时的情况下重新启动吗?

1 个答案:

答案 0 :(得分:1)

要等待AutoResetEvent 而没有超时可能导致无限等待;它使工作线程依赖于外部效应,从而易受攻击。

这就是为什么我一般都赞成使用超时。

如果没有超时,只有while(true)(或类似),工作线程将连续旋转。所以它不会重新开始,它会循环播放。