library esiur; import 'AsyncReply.dart'; class AsyncQueue extends AsyncReply { List> _list = >[]; // object queueLock = new object(); add(AsyncReply reply) { //lock (queueLock) _list.add(reply); //super._resultReady = false; super.setResultReady(false); reply.then(processQueue); } remove(AsyncReply 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.setResultReady(_list.length == 0); } AsyncQueue() {} }