【发布时间】:2019-04-24 06:43:54
【问题描述】:
我想知道如果我想在每次迭代时将线程暂停一段定义的时间是否有任何问题(我正在运行一个连续循环)。
我的第一选择是使用Task.Delay,但我不知道是否有任何问题。我应该选择Thread.Sleep 还是EventWaitHandle?
class UpdateThread {
private Thread thread;
Fabric.Client client;
public UpdateThread(Fabric.Client client) {
}
public void Run() {
thread = new Thread(new ThreadStart(async()=>await UpdateAsync()));
}
public async Task UpdateAsync() {
while (true) {
await Task.Delay(Constants.REFRESH_INTERVAL);
}
}
}
上述方法的缺点是什么?
P.S:此线程与Windows Forms 应用程序(线程)一起运行
【问题讨论】:
-
我在这里要小心,Thread.Sleep 通常表明您正在等待其他事情完成,除非其他事情是确定性的(在 dot net 中可能不是),这可能会引入错误。或者你最终会暂停你的线程超过必要的时间(以避免提前唤醒它。看看这个blogs.msmvps.com/peterritchie/2007/04/26/…
-
我倾向于
Task.Delay。它有什么问题吗?我只想暂停以下代码的执行一段定义的时间。
标签: c# multithreading task-parallel-library