Home / 开发 / 奇怪的姿势golang并发限制数量和dart异步限制数量
golang看起来舒服多了
package main
import (
"fmt"
"sync"
)
func main() {
td := make(chan int, 10)
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
td <- i
go func() {
defer wg.Done()
fmt.Println(<-td)
}()
}
wg.Wait()
fmt.Println("完成")
}
接下来是dart想模仿上面操作,搞了半天dart搞不懂,结果另辟蹊径,这操作就是秀~
int concurrencyLimit = 10; // 你可以根据需要调整并发上限
// 创建一个列表来存储所有的Future
List<Future<int>> futures = [];
for (int i = 0; i < 1000; i++) {
// 控制并发数量
while (concurrencyLimit <= 0) {
await Future.delayed(Duration(milliseconds: 100));
}
// 处理数据 这操作
concurrencyLimit--;
// 启动一个异步任务并将其Future添加到列表中
futures.add(() async {
concurrencyLimit++;
return i;
}());
}
// 等待所有的Future完成
await Future.wait(futures);