1 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個贊
select {
case p.cleanerCh <- struct{}{}:
default:
}
這是一個非阻塞select語句。(因?yàn)橛衐efault:案例)
如果在通道的另一端有一個接收器 goroutine p.cleanerCh,即當(dāng)前有一個 goroutine 在接收操作中“等待” <-p.cleanerCh,則case p.cleanerCh <- struct{}{}立即執(zhí)行它,這有效地解除了接收操作<-p.cleanerCh的阻塞,然后 goroutine 可以繼續(xù)執(zhí)行任何操作聲明如下。
如果沒有接收者 goroutine,那么default:case 會立即執(zhí)行,并且周圍的startCleanerLocked函數(shù)可以繼續(xù)執(zhí)行語句后面的任何select語句。
select {
case <-ticker.C:
case <-p.cleanerCh: // maxLifetime was changed or db was closed.
}
這是一個阻止select聲明。(因?yàn)闆]有default:案例)
該select語句阻塞for循環(huán),直到兩個通信案例之一準(zhǔn)備好接收。
- 1 回答
- 0 關(guān)注
- 141 瀏覽
添加回答
舉報(bào)