static void _schedulePriorityAsyncCallback(ZoneCallback callback) { var state = _getState(); if (state._nextCallback == null) { _scheduleAsyncCallback(callback); state._lastPriorityCallback = state._lastCallback; return; } _AsyncCallbackEntry entry = new _AsyncCallbackEntry(callback); if (state._lastPriorityCallback == null) { entry.next = state._nextCallback; state._nextCallback = state._lastPriorityCallback = entry; } else { entry.next = state._lastPriorityCallback.next; state._lastPriorityCallback.next = entry; state._lastPriorityCallback = entry; if (entry.next == null) { state._lastCallback = entry; } } }
static void _microtaskLoop() { var state = _getState(); while (state._nextCallback != null) { state._lastPriorityCallback = null; _AsyncCallbackEntry entry = state._nextCallback; state._nextCallback = entry.next; if (state._nextCallback == null) { state._lastCallback = null; } entry.callback(); } }
static void _scheduleAsyncCallback(ZoneCallback callback) { var state = _getState(); _AsyncCallbackEntry newEntry = new _AsyncCallbackEntry(callback); if (state._nextCallback == null) { state._nextCallback = state._lastCallback = newEntry; if (!state._isInCallbackLoop) { _AsyncRun._scheduleImmediate(_startMicrotaskLoop); } } else { state._lastCallback.next = newEntry; state._lastCallback = newEntry; } }