在Go中,協(xié)程的退出通常通過chan
實現(xiàn)。下面是一種常見的模式來實現(xiàn)阻塞的協(xié)程退出:
package main
import (
"fmt"
"time"
)
func worker(done chan bool) {
fmt.Println("協(xié)程開始執(zhí)行...")
// 模擬耗時操作
time.Sleep(2 * time.Second)
fmt.Println("協(xié)程執(zhí)行完畢!")
done <- true
}
func main() {
done := make(chan bool)
go worker(done)
// 阻塞等待協(xié)程完成
<-done
fmt.Println("主函數(shù)退出")
}
在上面的例子中,worker
函數(shù)是一個阻塞的協(xié)程,它執(zhí)行一些耗時的操作。在worker
函數(shù)執(zhí)行完畢后,通過將true
發(fā)送到done
通道來通知主函數(shù)協(xié)程的完成。主函數(shù)使用<-done
語法從通道中接收數(shù)據(jù),從而阻塞等待協(xié)程的完成。一旦接收到數(shù)據(jù),主函數(shù)就會繼續(xù)執(zhí)行,打印"主函數(shù)退出"。
這種使用chan
來實現(xiàn)協(xié)程退出的模式非常常見,因為它提供了一種簡單而可靠的方式來同步協(xié)程的執(zhí)行。