vendredi 7 août 2015

C# - Is it always bad to use Thread.Sleep()?

I created an extension method for the the class 'Random' which executes and 'Action' (void delegate) at random times:

public static class RandomExtension
{
    private static bool _isAlive;
    private static Task _executer;

    public static void ExecuteRandomAsync(this Random random, int min, int max, int minDuration, Action action)
    {
        Task outerTask = Task.Factory.StartNew(() =>
        {
            _isAlive = true;
            _executer = Task.Factory.StartNew(() => { ExecuteRandom(min, max, action); });
            Thread.Sleep(minDuration);
            StopExecuter();
        });
    }

    private static void StopExecuter()
    {
        _isAlive = false;
        _executer.Wait();

        _executer.Dispose();
        _executer = null;
    }

    private static void ExecuteRandom(int min, int max, Action action)
    {
        Random random = new Random();

        while (_isAlive)
        {
            Thread.Sleep(random.Next(min, max));
            action();
        }
    }
}

It works fine.

But is the use of Thread.Sleep() in this example ok, or should you generally never use Thread.Sleep(), what complications could occur ? Are there alternatives?




Aucun commentaire:

Enregistrer un commentaire