gpt4 book ai didi

Golang WaitGroup 超时错误处理

转载 作者:IT王子 更新时间:2023-10-29 01:04:41 32 4
gpt4 key购买 nike

在下面的代码中,如果其中一个启动的 go 例程花费太长时间(例如 > 10 秒)完成,我如何添加适当的超时错误处理?请注意,我不想有一个“整体”超时,而是每个 go 例程的超时,这样我也可以在我的错误报告中知道哪个 go 例程超时。

var wg sync.WaitGroup

for _, element:= range elements{
wg.Add(1)
go doWork(element, &wg)
}
wg.Wait()

亲切的问候

最佳答案

您可以使用 Context ,通过以下方式:

func doWork(ctx context.Context, element Element, wg &sync.WaitGroup) {
defer wg.Done()

done := make(chan struct{})
go func() {
// do some work on element
done <- struct{}{} // signal work is done
}

select {
case <- done:
{
// work completed in time
}
case <- ctx.Done:
{
// timeout reached
}
}
}

contexts := make([]*context.Context, len(elements))

for _, element:= range elements{
wg.Add(1)
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
defer cancel()
contexts = append(contexts, ctx)
go doWork(ctx, element, &wg)
}
wg.Wait()

for i, ctx := range contexts {
if ctx.Err() {
fmt.Println("Go routine ", i, "canceled due to", ctx.Err())
}
}

关于Golang WaitGroup 超时错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46509979/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com