gpt4 book ai didi

c# - 使用 Thread.Sleep() 总是不好的吗?

转载 作者:IT王子 更新时间:2023-10-29 04:03:26 25 4
gpt4 key购买 nike

我为 Random 类创建了一个扩展方法,它随机执行一个 Action(void delegate):

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();
}
}
}

它工作正常。

但是在这个例子中使用 Thread.Sleep() 可以吗,或者您通常不应该使用 Thread.Sleep(),会出现什么并发症?有其他选择吗?

最佳答案

使用 Thread.Sleep 不好吗?通常不会,如果你真的想暂停线程。但在这种情况下,您不想挂起线程,而是想挂起任务

所以在这种情况下,你应该使用:

await Task.Delay(minDuration);

这不会挂起整个线程,而只会挂起您要挂起的单个任务。同一线程上的所有其他任务可以继续运行。

关于c# - 使用 Thread.Sleep() 总是不好的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31873098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com