Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
        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();
            }
        }
Beispiel #3
0
        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;
            }
        }