Flutter

flutter 队列,进行下载排队

2021-05-27  本文已影响0人  代瑶
import 'dart:collection';

class MyQueueTask {
  int maxThread = 1;

  MyQueueTask(this.maxThread);

  ///当前任务队列
  Queue<_TaskInfo> _queue = Queue();

  ///是否工作中
  int _taskCount = 0;

  void create(String taskName, Function(String name) workTask) {
    _queue.add(_TaskInfo(taskName, workTask));
    _exec();
  }

  void _exec() async {
    if (_taskCount >= maxThread) return;
    if (_queue.isEmpty) return;

    for (int i = 0; i < maxThread; i++) {
      if (_queue.isEmpty) continue;

      _TaskInfo _taskInfo = _queue.removeFirst();
      _taskCount += 1;
      await _taskInfo.workTask.call(_taskInfo.taskName);
      _taskCount -= 1;
    }
    _exec();
  }
}

class _TaskInfo {
  String taskName;
  Function(String taskName) workTask;

  _TaskInfo(this.taskName, this.workTask);
}


这个下载队列呢,就是一个单管道的, 里面的变量也没做特殊的处理

import 'my_queue_task.dart';

main() async {
  MyQueueTask _queueTask = MyQueueTask(1);
  _queueTask.create("task1", _doTask);
  _queueTask.create("task2", _doTask);
  _queueTask.create("task3", _doTask);
  _queueTask.create("task4", _doTask);
  _queueTask.create("task5", _doTask);

  await Future.delayed(Duration(seconds: 15));
}

Future _doTask(name) async {
  await Future.delayed(Duration(seconds: 2));
  print('触发执行 $name');
  return;
}

每隔两秒输出


image.png
上一篇下一篇

猜你喜欢

热点阅读