梦幻科技studio

 

关于C#中await Task.Delay的使用

这次写代码出现了这样一个问题,
await Task.Delay(1000 * 60 * 60);  // 等待 1 小时

使用了这样一条语句,执行时发现UI界面的运行时间不更新了,于是查找资料,更改代码为下:

for (int j = 0; j < 2 * 60 * 60; j++)  // 总共循环 7200 次
{
    await Task.Delay(500);  // 每次延迟 500 毫秒
}

这次显示又正常了。于是总结了一下原因。

使用 for 循环

当需要在延迟过程中进行额外操作时(如定时检查、更新 UI、响应外部信号)。

例如:实现一个定时任务,每 500 毫秒检查是否需要停止

使用单次延迟

当只需要单纯等待一定时间,不需要任何额外操作时。

例如:模拟一个简单的定时器。

两者区别如下

两者主要区别

时间粒度

for 循环:每次只延迟 500 毫秒,循环中间可以插入其他操作,比如检查某个条件、更新状态等。

单次延迟:直接延迟 1 小时,整个过程是不可分割的。

响应性

for 循环:在每次 500 毫秒的间隔中,你可以执行其他逻辑,比如判断是否需要提前终止循环(例如通过检查取消标志 CancellationToken)。

单次延迟:在整个 1 小时内程序是“休眠”状态,没有机会处理其他任务。

性能

单次延迟:性能更高,因为没有循环的额外开销。

for 循环:性能稍逊,但灵活性更高。

posted on 2025-01-21 19:35  梦幻科技studio  阅读(303)  评论(0)    收藏  举报

导航