여러 고 루틴의 종료를 조정하는
package main import ( "context" "sync" ) func main() { // Create a context and a function to cancel it ctx, cancel := context.WithCancel(context.Background()) // Initialize a wait group to track goroutine completion wg := sync.WaitGroup{} wg.Add(3) // Add 3 goroutines to the wait group // Launch three goroutines // Each goroutine listens for the context to be done go func() { defer wg.Done() for { select { case
. 일반적인 접근 방식 중 하나는 채널을 사용하여 완료를 신호하는 것입니다. 그러나이 방법은 고 루틴이 예상 순서대로 종료되지 않으면 "폐쇄 채널"공황으로 이어질 수 있습니다. 더 나은 솔루션에는 컨텍스트 사용이 포함됩니다. 컨텍스트는 고리 틴 간의 의사 소통 및 취소 메커니즘을 제공합니다.
![]()
패키지 메인에서이를 구현하는 방법은 다음과 같습니다 수입 (수입) "문맥" "동조" )) func main () { // 컨텍스트와 기능을 취소 할 함수를 만듭니다. CTX, 취소 : = context.withCancel (context.background ()) // 대기 그룹을 초기화하여 GorOutine 완료를 추적합니다 wg : = sync.waitgroup {} wg.add (3) // 대기 그룹에 3 개의 고어 라틴을 추가합니다 // 3 개의 goroutines를 시작합니다 // 각 Goroutine은 컨텍스트가 수행 될 수 있도록 듣습니다. go func () { WG.Done을 연기 () 을 위한 { 선택하다 { case
이 예에서 세 번째 고루 틴이 작업을 완료하면 컨텍스트를 취소합니다. 이로 인해 다른 goroutines의 취소가 전파되어 종료됩니다. 컨텍스트를 사용함으로써 당황한 가능성을 제거하고 모든 고루틴이 종료를 효과적으로 조정하도록합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3