ErrGroup-有错误返回的Goroutine控制

简介: ErrGroup-有错误返回的Goroutine控制
package main
import (
  "fmt"
  "time"
)
func main() {
  timeNow := time.Now()
  a := f1()
  b := f2()
  c := f3()
  fmt.Println("和为:", a+b+c)
  fmt.Println("耗时:", time.Since(timeNow))
}
func f1() int {
  time.Sleep(1e9)
  return 1
}
func f2() int {
  time.Sleep(1e9)
  return 2
}
func f3() int {
  time.Sleep(1e9)
  return 3
}

运行结果为:

和为: 6
耗时: 3.00640904s
package main
import (
  "fmt"
  "golang.org/x/sync/errgroup"
  "time"
)
func main() {
  var (
    g = &errgroup.Group{}
    a int
    b int
    c int
  )
  timeNow := time.Now()
  g.Go(func() error {
    a = f1()
    return nil
  })
  g.Go(func() error {
    b = f2()
    return nil
  })
  g.Go(func() error {
    c = f3()
    return nil
  })
  g.Wait()
  fmt.Println("和为:", a+b+c)
  fmt.Println("耗时:", time.Since(timeNow))
}
func f1() int {
  time.Sleep(1e9)
  return 1
}
func f2() int {
  time.Sleep(1e9)
  return 2
}
func f3() int {
  time.Sleep(1e9)
  return 3
}

运行结果为:

和为: 6
耗时: 1.003517107s
目录
相关文章
|
18天前
|
监控 Java
捕获线程执行异常的多种方法
【10月更文挑战第15天】捕获线程执行异常的方法多种多样,每种方法都有其特点和适用场景。在实际开发中,需要根据具体情况选择合适的方法或结合多种方法来实现全面有效的线程异常捕获。这有助于提高程序的健壮性和稳定性,减少因线程异常带来的潜在风险。
13 1
|
18天前
|
监控 API
Hook 线程与捕获线程执行异常
【10月更文挑战第11天】Hook 线程和捕获线程执行异常是多线程编程中不可或缺的技术。通过深入理解和掌握这些方法,我们可以提高程序的稳定性和可靠性,更好地应对各种异常情况。同时,在实际应用中要注意平衡性能和准确性,制定合理的异常处理策略,以确保程序的正常运行。
26 1
你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码
你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码
2722 0
你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码
|
缓存 Go
控制goroutine 的并发执行数量
控制goroutine 的并发执行数量
140 0
|
6月前
|
移动开发
线程字符串传递方式
线程字符串传递方式
45 0
|
存储 Java
高并发编程-捕获线程运行时的异常 + 获取调用链
高并发编程-捕获线程运行时的异常 + 获取调用链
94 0
|
Java 调度
线程各种状态转换分析
线程在它的生命周期中会处于各种不同的状态:新建、等待、就绪、运行、阻塞、死亡。
174 0
线程各种状态转换分析
|
Java Spring
异步调用为什么要复制线程上下文信息?
异步调用为什么要复制线程上下文信息?
185 0
异步调用为什么要复制线程上下文信息?
对线程中未捕获的异常进行处理UncaughtExceptionHandler
对线程中未捕获的异常进行处理UncaughtExceptionHandler
|
存储 Java 程序员
在线程异步的场合下,如何将线程信息传递到调用处(1)
在线程异步的场合下,如何将线程信息传递到调用处
129 0