Sobes.tech
Junior — Middle

Kan een taak van de ene naar de andere goroutine worden overgedragen, die in inactieve staat verkeert?

sobes.tech AI

Antwoord van AI

In Go is het niet mogelijk om een taak rechtstreeks van de ene naar de andere goroutine te sturen, omdat goroutines geen ingebouwd mechanisme hebben om taken aan elkaar over te dragen.

Echter, om de overdracht van taken tussen goroutines te organiseren, worden meestal kanalen (channels) gebruikt. Een goroutine kan taken naar een kanaal sturen, en een andere kan deze ontvangen en uitvoeren. Als de ontvangende goroutine in afwachting is, wacht ze op gegevens uit het kanaal en verwerkt ze deze onmiddellijk bij ontvangst.

Voorbeeld:

 tasks := make(chan func())

// Uitvoerende goroutine
go func() {
    for task := range tasks {
        task() // voert de taak uit
    }
}()

// Verzendende goroutine
tasks <- func() {
    fmt.Println("Taak voltooid")
}

Op deze manier wordt de taak via het kanaal overgedragen, en de wachtende goroutine ontvangt en voert deze uit.