gpt4 book ai didi

C# System.Threading.Timer 递归更新

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:54 25 4
gpt4 key购买 nike

我有一个定时器,它每 15 秒调用一个函数,它在前 5 次有效,但在第 6 次时不会失效,即使它已创建,有什么想法吗?

如果线程 A 正在处理数据,而线程 B 发出新的数据请求,处理时间可能会超过 15 秒。在线程 A 的处理完成之前,线程 B 无法启动。

const int DATAREFRESH = 15000;

void RequestUpdate()
{
// Some data processing goes here
Console.WriteLine("Update");

// Set the timer
Timer t = new Timer(new TimerCallback(TimeOutCallback), null, DATAREFRESH, Timeout.Infinite);
}

private void TimeOutCallback(object state)
{
RequestUpdate();
}

在“输出”窗口中,“更新”显示了 5 次,之后就什么也没有了。它没有卡住,我看到 ~8 个线程在最后一次“更新”后终止。

我怎样才能让它无限地工作?

最佳答案

从回调中实例化一个新计时器似乎很奇怪。一个更现实的例子是您在定时器回调中执行工作。此外,您似乎错误地调用了 Timer 构造函数。如果您希望回调定期执行(在您的情况下为 15 秒),您可以使用以下内容:

const int DATAREFRESH = 15000;
private Timer _timer;

void RequestUpdate()
{
// Set the timer
_timer = new Timer(TimeOutCallback, null, 0, DATAREFRESH);
}

private void TimeOutCallback(object state)
{
// Some data processing goes here
Console.WriteLine("Update");
}

另请注意我如何反转传递给计时器的参数,以便它每 15 秒执行一次回调。

关于C# System.Threading.Timer 递归更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com