Прекращение Goroutine при возврате вызывающей функции - PullRequest
0 голосов
/ 13 октября 2018

Если я вызову программу в функции, и эта функция вернется, будет ли программа завершена или она продолжит выполняться?

1 Ответ

0 голосов
/ 14 октября 2018

Вы должны дождаться завершения всех процедур в главном потоке вашей программы (или, скажем, в основном методе).

Давайте рассмотрим пример

package main

import (
    "fmt"
    "time"
)

func foo() {
    go func() {
        fmt.Println("sleeping for 5 sec")
        time.Sleep(5 * time.Second)
        fmt.Println("Done")
    }()
}

func main() {
    foo()
}

Когда вы запустите указанный выше код, он немедленно завершится (означает, что главный поток не будет ждать, пока выполнение goroutine завершится первым).

Для достижения этого в go Я использую https://golang.org/pkg/sync/#WaitGroup

package main

import (
    "fmt"
    "sync"
    "time"
)

// see https://golang.org/pkg/sync/#WaitGroup
var wg sync.WaitGroup

func foo() {
    go func() {
        wg.Add(1)
        defer wg.Done()

        fmt.Println("sleeping for 5 sec")
        time.Sleep(5 * time.Second)
        fmt.Println("Done")
    }()
}

func main() {
    foo()
    fmt.Println("Waiting for goroutine to finish")
    wg.Wait()
    fmt.Println("All goroutine to finished")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...