Totallama
Totallama

Reputation: 448

The simplest possible infinitely repeat

I need the simplest possible Timer to repeat my code infinitely every 5 seconds. No external classes or whatnot.

Just:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Now the following code will be repeated over and over");
    
        //////////////// FOLLOWING CODE /////////////////
        /* the repeated code */
        //////////////// END OF FOLLOWING CODE /////////////////

    }
}

How can I do that?

Upvotes: 0

Views: 144

Answers (5)

Tejas R
Tejas R

Reputation: 9

Use this code for call your function recursively for every 5 seconds.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace recurssiveWithThread
{
    class Program
    {

        static void Main(string[] args)
        {

            RecWork();     
        }
        public static int i = 0;
        public static void RecWork()
        {
            // Do the things whatever you needed here 

            i++;
            Console.WriteLine(i);
            //Thread to make the process to sleep for sometimes
            Thread.Sleep(5000);

            //Call your function here
            RecWork();
        }           
    }
}

Upvotes: 1

Vivek Nuna
Vivek Nuna

Reputation: 1

Use Timer.

static void Main(string[] args)
{

    Timer timer = new System.Threading.Timer((e) =>
    {
        Console.WriteLine("Now the following code will be repeated over and over");
    }, null, 0, (int)TimeSpan.FromSeconds(5).TotalMilliseconds);

    Console.Read();
}

Here I have called Console.WriteLine multiple times, you can write your code block instead of it.

You can use Thread.Sleep(5000); But again its also external class according to the OP.

But I would suggest a better solution using Async and Await. One more thing you should have a termination condition, so that you dont produce an infinite call to avoid unnecessary memory consumption.

public static async Task RepeatActionEveryInterval(Action action, TimeSpan interval, CancellationToken cancelToken)
{
    while (true)
    {
        action();
        Task task = Task.Delay(interval, cancelToken);

        try
        {
            await task;
        }

        catch (TaskCanceledException)
        {
            return;
        }
    }
}


static void Main(string[] args)
{

    CancellationTokenSource cancelToken = new CancellationTokenSource(TimeSpan.FromSeconds(50));
    Console.WriteLine("Start");
    RepeatActionEveryInterval(() => Console.WriteLine("Repeating Code"), TimeSpan.FromSeconds(5), cancelToken.Token).Wait();
    Console.WriteLine("End");
    Console.Read();
}

In this example this code will write till 50 seconds.

Upvotes: 1

bhuvin
bhuvin

Reputation: 1402

Simplest form of it :

using System.Threading;

static void Main(string[] args)
{
    bool breakConditionFlag = false;
    ManualResetEvent waitHandler = new ManualResetEvent(false); 

    while(breakConditionFlag)
    {

    //Your Code

    waitHandler.WaitOne(TimeSpan.FromMilliseconds(1000)); // 1000 is the Arbitary value you can change it to Suit your purpose;

    }
}

Why ManualResetEvent ?

The event makes more efficient use of the processors- you're not having to wake the parent thread up to poll. The kernel will wake you up when the event fires.

Upvotes: 1

Amey Khadatkar
Amey Khadatkar

Reputation: 414

Use BackgroundWorker class:

Reference links: Background worker

If you are using framework >= 4.5.2 QueueBackgroundWorkItem

QueueBackgroundWorkItem

Upvotes: 0

geothachankary
geothachankary

Reputation: 1082

Use while(true) with Thread.Sleep

    using System.Threading;

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Now the following code will be repeated over and over");

            while(true)
            {
                //////////////// FOLLOWING CODE /////////////////
                /* the repeated code */
                //////////////// END OF FOLLOWING CODE /////////////////
              Thread.Sleep(5000);
            }   
        }
    }

Upvotes: 1

Related Questions