迭代器异步等待与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");        
    }
}

猜你喜欢

转载自blog.csdn.net/Abecedarian_CLF/article/details/85005839