private static void DispatchOperations() { ThreadOperation operation = _ops.Dequeue(); if (operation == null) { return; } Mixpanel.Log($"Dispatching new operation: {operation.GetAction()}"); Value data = operation.GetWhat(); switch (operation.GetAction()) { case ThreadOperation.ThreadOperationAction.ENQUEUE_EVENTS: MixpanelStorage.TrackPersistentQueue.Enqueue(data); break; case ThreadOperation.ThreadOperationAction.ENQUEUE_PEOPLE: MixpanelStorage.EngagePersistentQueue.Enqueue(data); break; case ThreadOperation.ThreadOperationAction.FLUSH: if (_isBgThreadRunning) { IEnumerator trackEnum = SendData(MixpanelStorage.TrackPersistentQueue, Config.TrackUrl); IEnumerator engageEnum = SendData(MixpanelStorage.EngagePersistentQueue, Config.EngageUrl); while (trackEnum.MoveNext()) { } ; while (engageEnum.MoveNext()) { } ; } else { Controller.GetInstance().StartCoroutine(SendData(MixpanelStorage.TrackPersistentQueue, Config.TrackUrl)); Controller.GetInstance().StartCoroutine(SendData(MixpanelStorage.EngagePersistentQueue, Config.EngageUrl)); } break; case ThreadOperation.ThreadOperationAction.CLEAR_QUEUE: MixpanelStorage.TrackPersistentQueue.Clear(); MixpanelStorage.EngagePersistentQueue.Clear(); break; case ThreadOperation.ThreadOperationAction.KILL_THREAD: _isBgThreadRunning = false; _bgThread.Abort(); // Will throw an exception break; default: break; } }