[英]Swift async - how to await sleep()?
Swift 可以訪問 Darwin 的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
// ...
}
找到了。 Task
上有一個內置方法(Swift 標准庫的一部分),它提供了這種休眠功能來掛起當前任務而不阻塞線程。 Swift 運行時通過在運行時添加“暫停點”來實現這一點,因此線程將可以自由執行其他代碼,並且只會在任務恢復時返回 function。
“任務”是 Swift 的“結構化並發”提供的一種結構,用於幫助同時調度多個工作負載。 任何其他感興趣的人都可以在這里閱讀更多信息。
請注意,睡眠方法接受納秒。
func doWork() async {
// ...
await Task.sleep(10_000_000_000) // lightweight, does not block thread
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.