public void Run(Scheduler scheduler) { _scheduler = scheduler; Thread.Value = this; if (_enumerator == null) _enumerator = _func(); bool end = Loop(scheduler); Thread.Value = null; if (_parent != null && end) scheduler.RunMicrothread(_parent); }
private bool Loop(Scheduler scheduler) { if(_enumerator.MoveNext()) { if (_enumerator.Current is Microthread) scheduler.RunMicrothread(_enumerator.Current as Microthread); return false; } return true; }