Beispiel #1
0
	/// <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);
		}
	}
Beispiel #2
0
        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();
        }
Beispiel #3
0
	private static IEnumerator WrapCoroutineWithFinishFlag(IEnumerator coroutine, FinishFlag finishFlag)
	{
		try
		{
			while (coroutine.MoveNext())
				yield return coroutine.Current;
		}
		finally
		{
			finishFlag.SetFinished();
		}
	}