如何判斷channel是否已經關閉

讀channel的時候判斷其是否已經關閉

_,ok := <- jobs

此時如果 channel 關閉,ok 值爲 false


寫入channel的時候判斷其是否已經關閉

1._,ok := <- jobs

此時如果 channel 關閉,ok 值爲 false,如果 channel 沒有關閉,則會漏掉一個 jobs

2.使用 select 方式

再創建一個 channel,叫做 timeout,如果超時往這個 channel 發送 true,在生產者發送數據給 jobs 的 channel,用 select 監聽 timeout,如果超時則關閉 jobs 的 channel.


go func() {
 time.Sleep(time.Second * 3)
 timeout <- true
 }()
 go func() {
 for i := 0; ; i++ {
 select {
     case <-timeout:
         close(jobs)
         return
 
     default:
         jobs <- i
         fmt.Println("produce:", i)
         }
     }
 }()
參考鏈接:https://blog.csdn.net/u013870094/article/details/78608607
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章