Swift Concurrency -非阻塞睡眠()?

wkyowqbh  于 2023-02-03  发布在  Swift
关注(0)|答案(1)|浏览(121)

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
    // ... 
}
oyxsuwqo

oyxsuwqo1#

找到了。Task(Swift标准库的一部分)上有一个内置的方法,它提供了这种休眠功能,可以在不阻塞线程的情况下 * 暂停 * 当前任务。Swift运行时通过在运行时添加一个“暂停点”来实现这一点,这样线程就可以自由地执行其他代码,并且只有在任务恢复时才会返回该函数。
“Tasks”是Swift的“structured concurrency”提供的一个构造,用于帮助并发地分派多个工作负载。

func doWork() async {
    // ...
    await Task.sleep(for: .seconds(1)) // lightweight, does not block thread
    // ... 
}

相关问题