roundTask method

Future<void> roundTask()

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);
      }
    }
  });
}