1. 程式人生 > >迭代器非同步等待與Unity協程

迭代器非同步等待與Unity協程

迭代器非同步等待

Yield關鍵字與迭代器一文中有提到過用迭代器來實現5次迴圈的非同步等待操作,但是如果我們需要實現一定時間段的非同步等待操作,又該怎麼用迭代器來實現呢?
對於這樣一定時長的非同步等待操作,可以在迭代器中開啟一個迴圈,並設定一個時間判斷,當判斷不通過時,迭代器永遠都在迴圈中自我迭代,不會執行後續操作,而當判斷通過時,迭代器跳出迴圈,執行一定時長的非同步等待操作。

class IteratorWorkflow
    {
        static DateTime current;

        static IEnumerator<int>
GetEnumerable() { while(true) { if (DateTime.Now.Subtract(current).TotalMilliseconds > 1000) break; yield return 1; } Console.WriteLine("Hello Iterator"); } public static void
Main() { IEnumerator<int> iterator = GetEnumerable(); current = DateTime.Now; while (true) { Console.WriteLine("Hello World"); bool result = iterator.MoveNext(); } } }

Unity協程

Unity協程也是用迭代器來實現的,不過提供了更好的封裝效果和呼叫介面。在Unity協程中,可以選擇多種方式的等待,具體的方式可以參考這篇

部落格。類似上面的做法,我們可以更加簡單地使用Unity協程來實現一定時間的非同步等待效果。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using UnityEngine.UI;
 
public class Wait : MonoBehaviour 
{
	void Start () 
	{
        StartCoroutine(waitCreate(0.5f));
	}
 	void Update()
 	{
 		print("Hello World");
 	}
    private IEnumerator waitCreate(float seconds)
    {
        yield return new WaitForSeconds(seconds);
        print("Hello Iterator");        
    }
}