说我有一个功能
type Foo struct {}
func (a *Foo) Bar() {
// some expensive work - does some calls to redis
}
它在我的应用程序的某个时刻在 goroutine 中执行。许多这些可能在任何给定点执行。在应用程序终止之前,我想确保所有剩余的 goroutines 都已完成它们的工作。
我可以做这样的事情吗:
type Foo struct {
wg sync.WaitGroup
}
func (a *Foo) Close() {
a.wg.Wait()
}
func (a *Foo) Bar() {
a.wg.Add(1)
defer a.wg.Done()
// some expensive work - does some calls to redis
}
假设 Bar 在 goroutine 中执行,其中许多可能在给定时间运行,并且一旦调用 Close 并且在 sigterm 或 sigint 上调用 Close 时不应调用 Bar。
这有意义吗?
通常我会看到 Bar 函数如下所示:
func (a *Foo) Bar() {
a.wg.Add(1)
go func() {
defer a.wg.Done()
// some expensive work - does some calls to redis
}()
}
白衣染霜花
杨魅力
慕容森
largeQ
相关分类