public void Update(IServices services) { EnsureInitialized(); while (true) { if (_currentState != null) { if (!_currentState.IsCompleted) { return; } _currentState = null; } if (_currentExecutor != null) { while (_currentExecutor.Next(out var current)) { if (current == null) { throw new InvalidOperationException(); } if (current == BreakAwaitable.Instance) { break; } if (current == SpinAwaitable.Instance) { return; } _currentState = current.GetAwaiter(); if (!_currentState.IsCompleted) { return; } } _currentState = null; _currentExecutor.Complete(); _currentExecutor = null; } if (_executionQueue.Count <= 0) { break; } _currentExecutor = _executionQueue.Dequeue(); _currentExecutor.Execute(services); } }