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;
}
每隔两秒输出
![](https://img.haomeiwen.com/i8830165/3e091aea9f03d252.png)