private void CheckActiveJobs() { ThreadItem thread = m_Active; ThreadItem last = null; while (thread != null) { ThreadItem next = thread.NextActive; T job = thread.Data; if (job.IsAborted) { if (last == null) { m_Active = next; } else { last.NextActive = next; } thread.NextActive = null; thread.Reset(); m_Threads.Push(thread); } else if (thread.Data.IsDataReady) { job.OnFinished(); if (OnJobFinished != null) { OnJobFinished(job); } if (last == null) { m_Active = next; } else { last.NextActive = next; } thread.NextActive = null; thread.Reset(); m_Threads.Push(thread); } else { last = thread; } thread = next; } }