/// <summary> /// 异步调用协程并等待其完成 (有死锁风险) /// </summary> /// <param name="coroutine">欲调用的协程</param> public static void RunUntilFinish(IEnumerator coroutine) { if (IsMainThread()) throw new Exception("can not call this method in main thread, will cause deadlock"); FinishFlag finishFlag = new FinishFlag(); lock (m_taskQueue) m_taskQueue.Enqueue(WrapCoroutineWithFinishFlag(coroutine, finishFlag)); while (!finishFlag.IsFinished() && !m_stopped) { Thread.Sleep(20); } }
public void Finished() { FinishFlag.Set(); try { Storage.SetReadOnly(); } catch (Exception ex) { ErrorFunction("trouble setting readonly at end - " + ex.Message); } //if (reRequester != null) //{ // reRequester.Announce(1, null); //} FinishedFunction(); }
private static IEnumerator WrapCoroutineWithFinishFlag(IEnumerator coroutine, FinishFlag finishFlag) { try { while (coroutine.MoveNext()) yield return coroutine.Current; } finally { finishFlag.SetFinished(); } }