Swift可以访问达尔文的sleep
调用,该调用使用简单:
sleep(10) // waits for 10 seconds, but blocks the thread
但是,这会阻塞当前线程,既然Swift支持async
/await
,那么是否有一个内置的、非阻塞的sleep
方法,不会暂停当前线程?
// what I'm looking for:
func doWork() async {
// ...
await sleep(10) // lightweight, does not block thread
// ...
}
1条答案
按热度按时间oyxsuwqo1#
找到了。
Task
(Swift标准库的一部分)上有一个内置的方法,它提供了这种休眠功能,可以在不阻塞线程的情况下 * 暂停 * 当前任务。Swift运行时通过在运行时添加一个“暂停点”来实现这一点,这样线程就可以自由地执行其他代码,并且只有在任务恢复时才会返回该函数。“Tasks”是Swift的“structured concurrency”提供的一个构造,用于帮助并发地分派多个工作负载。