我有一个要运行的 C# 方法,然后稍等片刻再重新启动该方法。
现在,我正在使用
while(true)
{
this.DoMyMethod();
Thread.Sleep(TimeSpan.FromMinutes(1));
}
虽然这可行,但我想知道是否有更优雅的方法来做到这一点?计时器的问题是,即使最后一个计时器触发调用尚未完成,它们也会运行。
最佳答案
所以做一个异步循环:
public async Task DoMyThing(CancellationToken token = default(CancellationToken))
{
while(!token.IsCancellationRequested)
{
this.DoMyMethod();
try
{
await Task.Delay(TimeSpan.FromMinutes(1), token);
}
catch(TaskCanceledException)
{
break;
}
}
}
此代码保证不会与 DoMyMethod
的调用重叠,因此延迟(与 Thread.Sleep
的方式大致相同)发生在 调用之间。
如果您创建一个 CancellationTokenSource
, 你可以传递它的 Token
到您的方法,您可以通过调用 Cancel
终止循环在 CancellationTokenSource
上.
备注:CancellationToken.None === default(CancellationToken)
关于c# - 在不使用 Thread.Sleep 的情况下大约每分钟运行一次任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073613/