Я пытаюсь повторно использовать таймеры, останавливая и сбрасывая их.Я следую шаблону, указанному в документации.Вот простой пример, который можно запустить на игровой площадке, демонстрирующий проблему, с которой я столкнулся.
Существует ли правильный способ остановки и сброса таймера, который не связан с тупиками или условиями гонки?Мне известно, что использование выбора по умолчанию включает условие гонки по времени доставки сообщений в канале и не может зависеть от.
package main
import (
"fmt"
"time"
"sync"
)
func main() {
fmt.Println("Hello, playground")
timer := time.NewTimer(1 * time.Second)
wg := &sync.WaitGroup{}
wg.Add(1)
go func(_wg *sync.WaitGroup) {
<- timer.C
fmt.Println("Timer done")
_wg.Done()
}(wg)
wg.Wait()
fmt.Println("Checking timer")
if !timer.Stop() {
<- timer.C
}
fmt.Println("Done")
}