奇怪的姿势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);


Preview Image