美文网首页Go知识库
go多任务(协程)超时管理

go多任务(协程)超时管理

作者: 波涛澎湃 | 来源:发表于2019-03-15 20:17 被阅读1次

问题:开启多个协程,只有当所有协程全部返回后,才能继续执行主逻辑代码;同时添加超时功能,当到达设置的超时时间仍有协程未返回则直接输出错误。
解决方案:
使用两层协程,第一层开启一个协程管理所有的子协程任务,当所有子协程任务全部成功后通知主协程继续;
超时使用context包下的withtimeout 或者time.after。代码如下:


import (
    "fmt"
    "sync"
    "time"
)

var(
    sum int
    lock = sync.Mutex{}
    c = make(chan bool)
)

func main(){
    wg :=sync.WaitGroup{}
    go func(){
        funcSecond(&wg)
    }()
    select {
    case <-time.After(time.Second*11):
        fmt.Println("time out!")
    case <-c:
        fmt.Println("succ, sum should be equal 55,  sum=",sum)
    }
}
func funcSecond(wg *sync.WaitGroup){
    for i:=1;i<=10;i++{
        wg.Add(1)
        go foo(wg,i)
    }
    wg.Wait()
    c<-true
}
func foo(wg *sync.WaitGroup,j int){
    defer wg.Done()
    lock.Lock()
    defer lock.Unlock()
    sum=sum+j
    time.Sleep(time.Microsecond*10)
}

相关文章

  • go多任务(协程)超时管理

    问题:开启多个协程,只有当所有协程全部返回后,才能继续执行主逻辑代码;同时添加超时功能,当到达设置的超时时间仍有协...

  • golang中线程和协程的区别

    协程 协程,英文名Coroutine。但在 Go 语言中,协程的英文名是:gorutine。它常常被用于进行多任务...

  • Kotlin协程(4)✔️管理协程

    等待协程结束超时设置取消协程   协程的管理比线程的管理要简单的多。 等待协程结束   前面提到过 join 函数...

  • 21. Go 协程

    21. Go 协程 Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是...

  • 协程

    gevent方法实现多任务(协程) 了解yield和grenlet yield方法创建协程 greenlet方法创建协程

  • 4-7

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • 协程

    协程 协程,又称微线程,纤程。英文名Coroutine。 协程是啥 协程是python个中另外一种实现多任务的方式...

  • Go语言并发学习笔记

    一、Go程 1.goroutine是由 Go 运行时管理的轻量级线程 我们称之为Go程是因为现有的术语—线程、协程...

  • 协程——yield

    协程: 协程,又称微线程,纤程。英文名Coroutine。 协程是python个中另外一种实现多任务的方式,只不过...

  • go的协程并发-channel消息机制

    go的协程并发-channel消息机制 方式一 方式二 go-协程实现方案汇总

网友评论

    本文标题:go多任务(协程)超时管理

    本文链接:https://www.haomeiwen.com/subject/qftdmqtx.html