/// <summary> /// Schedules work for this worker. /// </summary> internal void Schedule(AsyncWorkUnit inUnit) { #if SUPPORTS_THREADING lock (m_LockObject) { if ((inUnit.AsyncFlags & AsyncFlags.MainThreadOnly) != 0) { m_Scheduler.Log("Scheduling {0} on main thread", inUnit); m_MainThreadOnlyQueue.Enqueue(inUnit); } else { m_Scheduler.Log("Scheduling {0} in background", inUnit); m_BackgroundQueue.Enqueue(inUnit); } } #else if ((inUnit.AsyncFlags & AsyncFlags.MainThreadOnly) != 0) { m_Scheduler.Log("Scheduling {0} on main thread", inUnit); m_MainThreadOnlyQueue.Enqueue(inUnit); } else { m_Scheduler.Log("Scheduling {0} in background", inUnit); m_BackgroundQueue.Enqueue(inUnit); } #endif // SUPPORTS_THREADING }
// Cancels all future steps private void Cancel() { for (int i = m_Nested.Count - 1; i >= 0; --i) { m_Nested[i].Cancel(); } m_Nested.Clear(); if (m_Status == AllCompleteFlag) { return; } if ((m_Status & CancelledFlag) == 0) { m_Scheduler.Log("Cancelling {0}", m_Name); m_Status |= CancelledFlag; } }