gpt4 book ai didi

c# - 如何在 C# 中实现 setInterval(js)

转载 作者:太空狗 更新时间:2023-10-29 19:52:20 24 4
gpt4 key购买 nike

JS的setInterval和setTimeOut真的很方便。我想问一下如何在 C# 中实现同样的事情。

最佳答案

您可以在 Task.Run 中执行一个 Task.Delay,尝试一下:

var task = Task.Run(async () => {
for(;;)
{
await Task.Delay(10000)
Console.WriteLine("Hello World after 10 seconds")
}
});

然后您甚至可以将其包装到您自己的 SetInterval 方法中,该方法执行一个操作

class Program
{
static void Main(string[] args)
{
SetInterval(() => Console.WriteLine("Hello World"), TimeSpan.FromSeconds(2));
SetInterval(() => Console.WriteLine("Hello Stackoverflow"), TimeSpan.FromSeconds(4));


Thread.Sleep(TimeSpan.FromMinutes(1));
}

public static async Task SetInterval(Action action, TimeSpan timeout)
{
await Task.Delay(timeout).ConfigureAwait(false);

action();

SetInterval(action, timeout);
}
}

或者你可以只使用内置的 Timer 类,它实际上做同样的事情

    static void Main(string[] args)
{

var timer1 = new Timer(_ => Console.WriteLine("Hello World"), null, 0, 2000);
var timer2 = new Timer(_ => Console.WriteLine("Hello Stackoverflow"), null, 0, 4000);


Thread.Sleep(TimeSpan.FromMinutes(1));
}

只需确保您的计时器不会超出范围并被处置。

.NET 6 更新

.NET 6 引入了一种名为 PeriodicTimer 的新类型,它简化了上述内容,并且可以像下面这样使用:

var timer = new PeriodicTimer(TimeSpan.FromSeconds(10));

while (await timer.WaitForNextTickAsync())
{
Console.WriteLine("Hello World after 10 seconds")
}

如果您需要能够取消计时器,WaitForNextTickAsync 函数有一个重载取消标记。

关于c# - 如何在 C# 中实现 setInterval(js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41081305/

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