roundTask method
Schedules the pool to run tasks, ensuring only one thread runs this logic at a time.
Implementation
Future<void> roundTask() async {
await _lock.synchronized(() async {
if (_taskList.isEmpty) return;
_taskList.sort((a, b) => b.priority - a.priority);
if (_taskList.length > _poolSize) {
for (var task in _taskList.sublist(_poolSize)) {
if (task.status == DownloadStatus.DOWNLOADING) {
task.status = DownloadStatus.PAUSED;
_notifyTask(task);
}
}
}
if (downloadingTasks.length < _poolSize) {
for (int i = 0; i < _taskList.length; i++) {
DownloadTask task = _taskList[i];
if (task.status == DownloadStatus.DOWNLOADING) continue;
if (downloadingTasks.length >= _poolSize) {
task.status = DownloadStatus.PAUSED;
_notifyTask(task);
continue;
}
task.status = DownloadStatus.DOWNLOADING;
_notifyTask(task);
_download(task);
}
}
});
}