第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

停止阻塞 goroutine

停止阻塞 goroutine

Go
長風(fēng)秋雁 2023-08-14 14:32:16
我怎樣才能殺死一個正在阻塞的 goroutine。一個想法是從主機(jī)函數(shù)返回將是一個解決方案,但我不確定這是否會殺死 goroutine。func myFunc() int {   c := make(<-chan int)   go func(){      for i := range c {      // do stuff      }   }()   return 0 // does this kills the inner goroutine?}有更好的解決方案嗎?例如,如果像這樣的東西可以工作就好了,但是由于它的阻塞而不能:func myFunc() int {   c := make(<-chan int)   closeChan := make(chan int)   go func() {      select {      case close := <-closeChan:         return 0      default:         for i := range c {            // do stuff         }      }   }()   closeChan<-0   // other stuff}
查看完整描述

1 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個贊

你不能從外部殺死一個 Goroutine——你甚至不能引用一個特定的 Goroutine;您也不能中止阻塞操作。但是,您可以將其移到for外部:


go func() {

   for  {

       select {

       case close := <-closeChan:

          return 0

       case i,ok := <-c:

         // do stuff

         if !ok {

             // channel is closed & empty

             return 0

         }

       }

   }

}()

這將永遠(yuǎn)循環(huán),每次迭代都會等待兩個通道上的消息;無論哪個先收到消息都將被處理,然后重復(fù)循環(huán)。這是 Go 中非常常見的模式。


查看完整回答
反對 回復(fù) 2023-08-14
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號