Junior — Middle
Vai uzdevumu var pārsūtīt no vienas goroutine uz citu, kas ir gaidstāvē?
sobes.tech AI
Atbilde no AI
Go valodā nav iespējams tieši nodot uzdevumu no vienas goroutines citai, kas ir gaidīšanas stāvoklī, jo goroutines nav iebūvēts mehānisms uzdevumu nodošanai savā starpā.
Tomēr, organizējot uzdevumu nodošanu starp goroutines, parasti tiek izmantoti kanāli (channels). Viena goroutine var sūtīt uzdevumus uz kanāla, bet otra tos saņemt un izpildīt. Ja saņemšanas goroutine gaida, tā gaidīs datus no kanāla un tos tūlīt apstrādās, saņemot.
Piemērs:
tasks := make(chan func())
// Izpildes goroutine
go func() {
for task := range tasks {
task() // izpildīt uzdevumu
}
}()
// Sūtīšanas goroutine
tasks <- func() {
fmt.Println("Uzdevums pabeigts")
}
Tādējādi uzdevums tiek nodots caur kanālu, un gaidīšanas goroutine to saņem un izpilda.