簡體   English   中英

Swift 異步 - 如何等待睡眠()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM