private IEnumerator UpdateGraphRoutine(NavMeshGraph graph) { updateInProgress = true; pathing.AddWorkItem(() => { UnstitchFromNeighbors(graph); }); pathing.FlushWorkItems(); while (pathing.IsAnyWorkItemInProgress) { yield return(null); } if (toRemove.Contains(graph)) { pathing.data.RemoveGraph(graph); toRemove.Remove(graph); } else { while (pathing.isScanning) { yield return(null); } pathing.Scan(graph); while (pathing.isScanning) { yield return(null); } pathing.AddWorkItem(() => { StitchToNeighbors(graph); }); pathing.FlushWorkItems(); while (pathing.IsAnyWorkItemInProgress) { yield return(null); } if (!lastUpdate.ContainsKey(graph)) { lastUpdate.Add(graph, Time.time); } else { lastUpdate[graph] = Time.time; } } updateInProgress = false; if (updateQueue.Count > 0) { StartCoroutine(UpdateGraphRoutine(updateQueue.Dequeue())); } }