是否可以使用线程计时器在计时器事件上触发工作线程?
我想使用threading.Timer因为我打算使用由时间触发的Windows服务,但我看到的所有使用timer的示例代码都使用callback / threadpool。但在我的服务中,任务将超过几秒钟(最多一分钟)并涉及相当复杂的逻辑,而不仅仅是更新几个字段。我认为这样可以证明我选择的是workerthread而不是threadpool吗?
答案 0 :(得分:0)
您可以使用回调和任务并行库来启动任务.... Task Parallelism
但是我相信this sample code正在做你想要的......我知道它使用了线程池......
“它在一个单独的线程池中执行 由...提供的线程 系统“。
......但为什么那么糟糕?
任务并行库基本上也做了类似的事情......
“在幕后,任务排队等候 一直到ThreadPool 增强算法(如 确定和 调整到的线程数 最大化吞吐量。 “
答案 1 :(得分:0)
我有类似的情况,我需要一组线程计时器。如果我的窗口服务已停止,我需要任何正在进行的计时器回调才能完成。
您dispose your timer时可以使用WaitHandle,允许完成任何正在进行的回调:
var onWait = new ManualResetEvent(false);
timer.Dispose(onWait);
....
onWait.WaitOne();
Here is my related question我没有遇到任何问题..但是。我的回调做了一些繁重的处理,最多需要10-20分钟才能完成。