Title here
Summary here
We often want to execute code at some point in the future, or repeatedly at some interval. C#’s built-in Timer class and System.Timers.Timer class make both of these tasks easy. We’ll look first at timers and then at periodic timers.
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
    static async Task Main()
    {
        // Timers represent a single event in the future. You
        // tell the timer how long you want to wait, and it
        // provides a Task that will complete at that time.
        // This timer will wait 2 seconds.
        var timer1 = new Timer(_ => Console.WriteLine("Timer 1 fired"), null, 2000, Timeout.Infinite);
        // We use Task.Delay to wait for the timer to complete
        await Task.Delay(2000);
        Console.WriteLine("Timer 1 fired");
        // If you just wanted to wait, you could have used
        // Thread.Sleep. One reason a timer may be useful is
        // that you can cancel it before it fires.
        // Here's an example of that.
        var cts = new CancellationTokenSource();
        var timer2 = new Timer(_ => Console.WriteLine("Timer 2 fired"), null, 1000, Timeout.Infinite);
        // Start a task that will cancel the timer after 500ms
        _ = Task.Run(async () =>
        {
            await Task.Delay(500);
            timer2.Change(Timeout.Infinite, Timeout.Infinite);
            Console.WriteLine("Timer 2 stopped");
        });
        // Give the timer2 enough time to fire, if it ever
        // was going to, to show it is in fact stopped.
        await Task.Delay(2000);
    }
}The first timer will fire ~2s after we start the program, but the second should be stopped before it has a chance to fire.
$ dotnet run
Timer 1 fired
Timer 2 stoppedIn this C# version:
System.Threading.Timer class, which is similar to Go’s timer.Task.Delay instead of time.Sleep for non-blocking waits.Change method with Timeout.Infinite as the parameters.async/await for asynchronous operations, which is more idiomatic in C# than creating separate threads.This example demonstrates basic timer usage in C#, including creating, waiting for, and stopping timers.