2
0
mirror of https://github.com/esiur/esiur-dart.git synced 2026-04-04 02:08:21 +00:00
Files
esiur-dart/lib/src/Core/AsyncQueue.dart
2022-08-11 21:28:41 +03:00

43 lines
896 B
Dart

library esiur;
import 'AsyncReply.dart';
class AsyncQueue<T> extends AsyncReply<T?> {
List<AsyncReply<T?>> _list = <AsyncReply<T?>>[];
// object queueLock = new object();
add(AsyncReply<T> reply) {
//lock (queueLock)
_list.add(reply);
//super._resultReady = false;
super.ready = false; // setResultReady(false);
reply.then(processQueue);
}
remove(AsyncReply<T> reply) {
//lock (queueLock)
_list.remove(reply);
processQueue(null);
}
void processQueue(T? o) {
//lock (queueLock)
for (var i = 0; i < _list.length; i++)
if (_list[i].ready) {
super.trigger(_list[i].result);
super.ready = false;
_list.removeAt(i);
i--;
} else
break;
//super._resultReady = (_list.length == 0);
super.ready = _list.length == 0; // .setResultReady(_list.length == 0);
}
AsyncQueue() {}
}