future supports multi-await but run once

This commit is contained in:
Li Jie
2024-09-09 09:34:29 +08:00
parent ccc7d056ba
commit 44617b6554
4 changed files with 156 additions and 19 deletions

View File

@@ -22,8 +22,25 @@ package async
import "sync"
func Async[T any](fn func(func(T))) Future[T] {
var once sync.Once
var result T
var wg sync.WaitGroup
wg.Add(1)
return func(chain func(T)) {
go fn(chain)
once.Do(func() {
go func() {
fn(func(v T) {
result = v
wg.Done()
})
}()
})
go func() {
wg.Wait()
chain(result)
}()
}
}