"sync"
)
func main() {
var wg sync.WaitGroup
numTasks := 10
// 增加任务数
wg.Add(numTasks)
for i := 0; i < numT"> "sync"
)
func main() {
var wg sync.WaitGroup
numTasks := 10
// 增加任务数
wg.Add(numTasks)
for i := 0; i < numT">
117.info
人生若只如初见

如何使用Go WaitGroup处理并发任务

在 Go 中使用 sync.WaitGroup 来处理并发任务,可以确保在所有任务完成之前等待主程序的执行。下面是一个简单的例子:

package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
numTasks := 10
// 增加任务数
wg.Add(numTasks)
for i := 0; i < numTasks; i++ {
go func(taskNum int) {
defer wg.Done() // 每个任务执行完成后减少任务数
fmt.Printf("Task %d is running\n", taskNum)
// 执行具体任务
}(i)
}
// 等待所有任务完成
wg.Wait()
fmt.Println("All tasks are completed")
}

在上面的例子中,我们首先创建了一个 WaitGroup 对象 wg,然后使用 Add() 方法增加了需要等待的任务的数量。在每个任务的 goroutine 中,我们使用 defer wg.Done() 来在任务执行完毕后减少任务数。最后,我们使用 Wait() 方法来等待所有任务完成,然后输出相应的信息。

对于每个任务,你可以在 go func() 中执行具体的任务逻辑,例如进行数据处理、调用 API,或者执行其他操作。每个任务完成时,调用 wg.Done() 来减少任务数。

使用 sync.WaitGroup 的好处是可以确保在所有任务完成之前主程序不会退出。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe252AzsLBARQAlw.html

推荐文章

  • 并发编程技巧:Go WaitGroup的高级用法

    在Go语言的并发编程中,WaitGroup是一个非常有用的工具,可以帮助我们等待一组并发操作的完成。除了基本的用法之外,WaitGroup还有一些高级用法,可以使我们的并...

  • Golang并发编程:利用Go WaitGroup实现任务队列

    Go语言的WaitGroup是用来等待一组goroutine执行完毕的工具,可以用来实现任务队列。下面是一个使用WaitGroup实现任务队列的示例代码:
    package main
    i...

  • Golang与FFmpeg: 实现实时视频流转码与封装的技术

    Golang与FFmpeg结合可以实现实时视频流转码与封装的技术。下面是一个简单的示例代码,展示了如何使用Golang调用FFmpeg进行实时视频流转码与封装。
    首先,你...

  • Golang中锁机制的性能优化技巧

    在Golang中,锁(Mutex)是一种常用的并发控制机制,但在某些情况下,使用锁可能会导致性能问题。以下是一些Golang中锁机制的性能优化技巧: 减少锁的粒度:尽量...

  • 构建可扩展性强的系统架构:Golang Facade模式详解

    Golang Facade模式是一种软件设计模式,用于构建可扩展性强的系统架构。该模式通过提供一个统一的接口,将复杂的子系统封装起来,使得客户端代码可以更简单地使用...

  • Golang中的任务并发执行和Go WaitGroup

    在Golang中,任务的并发执行可以通过goroutine和channel来实现。Goroutine是轻量级的线程,可以并发执行多个任务。Channel用于在不同的goroutine之间进行通信和数...

  • 任务分发与负载均衡:Go WaitGroup的实践应用

    在Go语言中,WaitGroup是一个用于等待一组goroutine完成执行的工具。它可以用来协调多个并发任务的执行和等待,确保所有任务完成后再继续执行主线程。
    下面...

  • 使用Golang和FFmpeg实现视频裁剪的技巧

    在Golang中,可以使用os/exec包来执行命令行程序,包括FFmpeg。以下是使用Golang和FFmpeg实现视频裁剪的示例代码:
    package main
    import (
    "fmt"...