Closed kevin4dhd closed 2 years ago
add the first queue final resultOne = await queue.add(code: "001",() async { await Future.delayed(Duration(seconds: 10)); return "Finish one"; });
Then comes the second queue final resultTwo = await queue.add(code: "002",() async { await Future.delayed(Duration(seconds: 10)); return "Finish Two"; });
Then comes a third queue with the same code as the first, so I would like that when the first one ends, the third queue is also executed. final resultThree= await queue.add(code: "001",() async { //returns the same result because 001 is already running await Future.delayed(Duration(seconds: 10)); //this is no longer running return "Finish one"; });
Hey @kevin4dhd
While a native solution might be added at some point, I would just extend the queue class with something like this:
class UniqueQueue<T> extends Queue {
var _uniqueTracker = <dynamic>{};
addUnique(dynamic identifier, Future<T> Function() closure) {
if (_uniqueTracker.contains(identifier) == false) {
add(closure);
_uniqueTracker.add(identifier);
}
}
}
then replace your queue object with UniqueQueue and call addUnique.
Going to close with this for now, but if there is something else feel free to keep responding.
Hello, I am implementing this library with the video thumbnail, but I have a problem, which is that sometimes the same element is called 2 times, causing an unnecessary queue to be generated, so I would like for example: