Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 带工作线程的线程计时器?_.net_Multithreading_Timer - Fatal编程技术网

.net 带工作线程的线程计时器?

.net 带工作线程的线程计时器?,.net,multithreading,timer,.net,Multithreading,Timer,是否可以使用线程计时器在计时器事件中触发工作线程 我想使用threading.Timer,因为我打算使用由时间触发的windows服务,但我看到的所有使用Timer的示例代码都使用回调/线程池。但在我的服务中,任务将超过几秒钟(最多一分钟),并且涉及相当复杂的逻辑,而不仅仅是更新几个字段。我认为这将证明我选择workerthread而不是threadpool是合理的?您可以使用回调和任务并行库来启动您的任务。。。。 但是我相信你在做你想做的。。。我知道它使用线程池 “它在单独的线程池中执行 由

是否可以使用线程计时器在计时器事件中触发工作线程


我想使用threading.Timer,因为我打算使用由时间触发的windows服务,但我看到的所有使用Timer的示例代码都使用回调/线程池。但在我的服务中,任务将超过几秒钟(最多一分钟),并且涉及相当复杂的逻辑,而不仅仅是更新几个字段。我认为这将证明我选择workerthread而不是threadpool是合理的?

您可以使用回调和任务并行库来启动您的任务。。。。

但是我相信你在做你想做的。。。我知道它使用线程池

“它在单独的线程池中执行 由提供的线程 系统。”

。。。但为什么那么糟糕呢

同时,任务并行库基本上也做了类似的事情

“在幕后,任务是排队的 到线程池,该线程池已 增强算法(如 (爬山)决定和 调整到所需的线程数 最大化吞吐量。”


我有一个类似的情况,我需要一组线程计时器。如果我的窗口服务被停止,我需要任何正在进行的计时器回调来完成

您可以在执行以下操作时使用WaitHandle,以完成任何正在进行的回调:

var onWait = new ManualResetEvent(false);
timer.Dispose(onWait);
....
onWait.WaitOne(); 

我还没有遇到任何问题。我的回调会进行一些繁重的处理,最多需要10-20分钟才能完成

可能任务并行性是个好主意,因为我要转移到另一个项目,可能需要几天时间来了解它的工作原理。我正在考虑从Threadpool转移到Threadpool。正如我所读到的,Threadpool用于有效地创建线程,没有太多开销,但与手动创建线程相比,它的功能和控制更少。当windows服务停止时,我恰好需要正确地完成线程代码,似乎线程池比线程需要做更多的工作。从.NET4来看,任务并行性似乎是一个有趣的新事物,但若任务能够做到这一点,那个么线程池应该能够做到吗?我可能会首先尝试让Threadpool工作。我并没有真正测试Peter的解决方案,因为那个项目已经被推迟,但我会在我的手空闲时回来测试它。请随意投票赞成或反对Peter关于其他反馈方式的解决方案。感谢Peter提出的解决方案,我不再参与该项目。它只是被推迟了,所以我可能会回到它。同时,从外观上看,它可能会起作用,我现在将标记您的解决方案作为答案。请注意,我可能会提供自己的解决方案,或者如果其他人提供有效的解决方案,而您的解决方案不适用于我的特定问题。