【发布时间】:2013-08-01 13:58:42
【问题描述】:
我有一个定时器线程函数
SampleTimer = new Timer(SomeTask,0,70000)
回调函数如下
void SomeTask(object o)
{
//block using autoresetevent
}
问题是 SomeTask() 回调方法每 70 秒调用一次,即使回调方法中的所有操作仍未完成。 如何防止计时器在其中的所有步骤完成之前调用 SomeTask() 函数
【问题讨论】:
-
"计时器" - 我知道框架中有 3 个类/组件,称为
Timer,它们可能都有不同的行为。您能否确定您指的是哪一个(例如命名空间)? -
那么当定时器再次触发时你该怎么办,忽略它?还是排队等待以后执行?
-
嗯..如果问题是多次调用,为什么不只是 Sleep() 循环它。微不足道,不可能并发运行。为什么似乎每个人都在不合适的时候使用计时器?
-
@MartinJames:因为计时器几乎总是比使用
Sleep绑定线程更可取。在这种情况下,计时器 是合适的,并且防止并发滴答声很简单。带有Sleep循环的线程通常表示设计不佳。见Programs are not cats。 -
@JimMischel - 这是一个未准备好的线程,所以它是死代码。谁在乎,即使在托管应用程序中?在可能出现不必要的多次调用时使用计时器是设计不当的标志。如果您使用 Sleep() 循环,防止并发滴答声并不简单 - 它是固有的,不是问题。
标签: c# multithreading timer