Beispiel #1
0
    public bool Work()
    {
        while (true)
        {
            // process nested work jobs first
            if (subWorker != null)
            {
                if (subWorker.Work())
                {
                    subWorker = null;
                }
                else
                {
                    // subWorker requested pause
                    return(false);
                }
            }

            if (workerInstance == null)
            {
                workerInstance = workerMethod();
                Start();
            }

            bool done = !workerInstance.MoveNext(); // we're done when we can't get next Enumerator element
            if (done)
            {
                // we truly are done
                Stop();
                workerInstance = null;
                return(true);
            }
            else
            {
                subWorker = workerInstance.Current as WorkerCoroutine;
                if (subWorker == null)
                {
                    // returned null take a break
                    return(false);
                }

                // returned a subWorker, no time to rest
                continue;
            }
        }
    }
Beispiel #2
0
 public void Cancel()
 {
     Stop();
     workerInstance = null;
     subWorker      = null;
 }