Sobes.tech
Junior — Middle

É possível transferir uma tarefa de uma goroutine para outra que esteja em estado de espera?

sobes.tech IA

Resposta da IA

Em Go, não é possível passar diretamente uma tarefa de uma goroutine para outra que esteja em estado de espera, pois as goroutines não possuem um mecanismo embutido para transferir tarefas entre si.

No entanto, para organizar a transferência de tarefas entre goroutines, geralmente usam-se canais (channels). Uma goroutine pode enviar tarefas para um canal, e outra pode recebê-las e executá-las. Se a goroutine que recebe tarefas estiver em espera, ela aguardará por dados do canal e os processará imediatamente ao recebê-los.

Exemplo:

tasks := make(chan func())

// Goroutine executora
go func() {
    for task := range tasks {
        task() // executa a tarefa
    }
}()

// Goroutine enviadora
tasks <- func() {
    fmt.Println("Tarefa concluída")
}

Dessa forma, a tarefa é passada através do canal, e a goroutine que está em espera a recebe e a executa.