Пример #1
0
        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;
                }
            }
        }