private IEnumerator Run() { _running = true; while (true) { if (!_active) { yield return(null); } _current = NextTask(); if (_current == null) { CoreLogger.LogTrace(name, "no task in queue - calling QueueEmpty and yielding"); QueueEmpty(); yield return(null); } else { CoreLogger.LogTrace(name, "starting next task..."); CoreLogger.LogInfo(name, string.Format("starting task...{0}", _current.Name)); bool notDone = true; _current.Start(result => { CoreLogger.LogInfo(name, string.Format("done with task {0}, result: {1}, time: {2}", _current.Name, result, _current.DoneTime)); notDone = false; }, _current.RequestedTimeout); while (notDone) { yield return(null); } _current = null; } } }