# taskgroup
*golang*并发执行多任务,并聚合多任务结果。
**[`使用文档`](https://pkg.go.dev/github.com/mlee-msl/taskgroup "欢迎使用,任何意见或建议可联系`2210508401@qq.com`")**、 **[`项目github`](https://github.com/mlee-msl/taskgroup/tree/main "taskgroup")**
> **使用:** go get github.com/mlee-msl/taskgroup
# 功能特点
- 并发安全的执行多个任务
- 将多个任务的结果进行聚合
- 通过**扇出/扇入**模式,结合线程安全`channel`实现高效协程间通信
- <big>多任务复用(共享)同一协程</big>,避免了协程频繁创建或销毁的开销
- `early-return`,当出现<big><u>必要成功</u></big>的任务失败时,停止执行所有`goroutine`后续的其他任务
# 对比[errgroup](https://pkg.go.dev/golang.org/x/sync/errgroup "errgroup")
- **errgroup** 没有任务添加阶段,直接会使用协程执行指定的任务
> 可通过限制协程数量上限,控制并发量(指定`buffer size`的`channel`实现),当协程数达到上限时,需要等待现有任务执行结束,然后开启新的协程,会增加协程创建或销毁的成本
>
> > 给[errgroup](https://cs.opensource.google/go/x/sync)项目提PR
- **errgroup**可支持带有[取消Context](https://pkg.go.dev/context#WithCancelCause)的模式,但实际上,该种模式下仍需要所有执行任务的`goroutine`执行完毕(每一个任务都会有新的`goroutine`)
# 关于
- 欢迎大家对 **[`项目github`](https://github.com/mlee-msl/taskgroup/tree/main "taskgroup")** 进行`star`、`fork`
- 欢迎大家积极共建,提一切可能的`Issues`,进行`PR(MR)`
有疑问加站长微信联系(非本文作者))