首页 > 解决方案 > dart中如何实现队列?

问题描述

我想在 Darts 中设置一个函数队列。排队应该是异步的,允许多个函数同时运行。但是,最多应同时执行三个功能。我怎样才能做到这一点?

我已经在一个列表中绑定了工作,但我正在努力增加对同时运行功能的限制

List<String> queue = new List();

main(){
  queue.add("...");
  queue.add("...");
  queue.add("...");

  for(String q in queue){
    await crawl(q);
  }
}

crawl(String) async{
   ...
}

标签: dart

解决方案


我会使用一个队列:

import "dart:collection";
final queue = Queue<String>();
main() {
  queue
    ..add("...")
    ..add("...")
    ..add("...");
  while (queue.isNotEmpty) {
    await crawl(queue.removeFirst());
  }
}

crawl(String x) async {
  .... queue.add(...) ...
}

这应该有效。它不会进行并发爬取,因为等待每个操作。如果你想要并发爬行,我建议你更聪明一点。寻找工作池或类似结构,以确保您只有一定数量的操作同时运行。


推荐阅读