go 任务队列执行超时
2017-11-29 10:09
169 查看
go的channel顾名思义是通道,并且是阻塞的 ,也可以当作阻塞队列使用
ch :=make(chan int)
ch<-1 如果不从ch中获取那么就一只阻塞在这里。
channel 也可以扩容 make(chan int,100)。
也是给这个队列加上超时
ch :=make(chan int)
ch<-1 如果不从ch中获取那么就一只阻塞在这里。
channel 也可以扩容 make(chan int,100)。
也是给这个队列加上超时
package main import ( "fmt" "sync" "time" ) var jobChan chan int var wg sync.WaitGroup // 执行任务 func worker(jobChan <- chan int) { defer wg.Done() for job := range jobChan { fmt.Printf("%d \n",job) } } func main() { jobChan = make(chan int,100) for i := 1;i <10;i++ { jobChan <-i } wg.Add(1) close(jobChan) go worker(jobChan) //wg.Wait() res := WaitTimeout(&wg, 5*time.Second) if res { fmt.Println("执行完成退出") } else { fmt.Println("执行超时退出") } } //利用select实现超时机制,select是只要case完成就继续往下走 func WaitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool { ch := make(chan struct{}) go func() { wg.Wait() close(ch) }() select { // 使用select必须是面向channel IO操作 case <-ch: return true case <-time.After(timeout): return false } }
相关文章推荐
- Java中的超时机制 - 执行一段有时间限制的任务
- 【Ecstore2.0】计划任务/队列/导入导出 的执行问题
- hadoop中的一次集群任务执行超时问题查找过程
- 【Ecstore2.0】计划任务/队列/导入导出 的执行问题
- 关于java中阻塞队列(LinkedBlockingQueue)中任务执行失败后的重试机制几种方案
- php运用curl触发后台脚本不超时执行某项任务
- Java通过缓存队列执行任务代码实现
- Golang 任务队列策略 -- 读《JOB QUEUES IN GO》
- GCD:dispatch_sync会在当前线程中执行派发到其他队列的任务
- task-DelayQueue-订单超时实例(task任务,DelayQueue阻塞队列)
- 用php实现异步执行任务的队列(一)
- Hadoop设置任务执行队列及优先级
- activiti实现任务超时,创建job不执行的原因
- 线程按次序执行队列任务
- Spring MVC 通过session 创建执行任务队列
- C#利用Task实现任务超时多任务一起执行的方法
- GCD--队列的类型和执行任务方式的四种的排列组合
- 线程池+队列 优先级方式执行队列任务
- var和let在异步任务队列中的执行差异
- hadoop中的一次集群任务执行超时问题查找过程