以 Kotlin 通道為例
for(msg in channel){
// to stuff
yield() // maybe?
}
你怎么知道是否需要產量?我假設 Channels 的構建方式會在迭代器的幕后自動產生,但我不確定。一般來說,在使用 Kotlin 協程庫的其余部分可能會自動為您完成時,您怎么知道您需要手動收益?
uj5u.com熱心網友回復:
在大多數情況下,您根本不需要使用yield()或關心它。每當我們到達暫停點時,協程就可以自動切換,這通常會經常發生。
yield()僅當我們的代碼不暫停很長時間時才需要。這通常意味著我們正在執行密集的 CPU 計算。在您的示例中,從頻道接收是暫停操作,因此您不需要yield()在這里。
uj5u.com熱心網友回復:
只需要在一段代碼中沒有掛起點的情況下yield,想人為地添加掛起點時呼叫。掛起點是對suspend函式的呼叫。
如果您不知道哪些函式suspend來自您的頭頂,您可以快速識別 IntelliJ IDEA 中的那些函式,例如,因為每個掛起函式呼叫都標有一個圖示:

因此,在您的情況下,您會在通道上的迭代中看到它:

yield如果您有專門使用常規函式的回圈或擴展代碼片段,或者更一般地說,如果您想確保其他協程有機會在特定時間點運行(例如在測驗中),您只需要手動添加. 這不應該經常發生。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/440831.html
