它取决于4.5,但这有效。
public class PeriodicTask{ public static async Task Run(Action action, TimeSpan period, CancellationToken cancellationToken) { while(!cancellationToken.IsCancellationRequested) { await Task.Delay(period, cancellationToken); if (!cancellationToken.IsCancellationRequested) action(); } } public static Task Run(Action action, TimeSpan period) { return Run(action, period, CancellationToken.None); }}显然,您可以添加一个也带有参数的通用版本。这实际上与其他建议的方法类似,因为在Task.Inde的内部,Delay使用计时器到期作为任务完成源。



