J'ai créé une méthode d'extension pour la classe Random
qui s'exécute et Action
(délégué void) à des moments aléatoires:
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();
}
}
}
Ça fonctionne bien.
Mais l'utilisation de Thread.Sleep()
dans cet exemple est-elle correcte, ou ne devriez-vous généralement jamais utiliser Thread.Sleep()
, quelles complications pourraient survenir? Existe-t-il des alternatives?