import 'dart:collection'; class FikoYTRequestQueue { static final FikoYTRequestQueue _instance = FikoYTRequestQueue._internal(); factory FikoYTRequestQueue() => _instance; final Queue _queue = Queue(); bool _isRunning = false; int _maxConcurrent = 5; int _currentRunning = 0; FikoYTRequestQueue._internal(); void enqueue(Function task) { _queue.add(task); _runQueue(); } void _runQueue() { if (_isRunning || _currentRunning >= _maxConcurrent) return; _isRunning = true; while (_queue.isNotEmpty && _currentRunning < _maxConcurrent) { final task = _queue.removeFirst(); _currentRunning++; Future(() => task()).whenComplete(() { _currentRunning--; _isRunning = false; _runQueue(); }); } } }