How to play and pause execution of goroutine?
Using channels we can play and pause execution of goroutine. A channel handles this communication by acting as a conduit between goroutines.
Example
package main
import (
"fmt"
"sync"
"time"
)
var i int
func work() {
time.Sleep(250 * time.Millisecond)
i++
fmt.Println(i)
}
func routine(command <-chan string, wg *sync.WaitGroup) {
defer wg.Done()
var status = "Play"
for {
select {
case cmd := <-command:
fmt.Println(cmd)
switch cmd {
case "Stop":
return
case "Pause":
status = "Pause"
default:
status = "Play"
}
default:
if status == "Play" {
work()
}
}
}
}
func main() {
var wg sync.WaitGroup
wg.Add(1)
command := make(chan string)
go routine(command, &wg)
time.Sleep(1 * time.Second)
command <- "Pause"
time.Sleep(1 * time.Second)
command <- "Play"
time.Sleep(1 * time.Second)
command <- "Stop"
wg.Wait()
}
Output
1
2
3
4
Pause
Play
5
6
7
8
9
Stop
Most Helpful This Week
What is a Goroutine?
How to fix race condition using Atomic Functions in Golang?
Catch values from Goroutines
How to create goroutines in Golang?
How to use a mutex to define critical sections of code and fix race conditions?
How to kill execution of goroutine?
How to wait for Goroutines to Finish Execution?