yield return的作用
测试1:
using UnityEngine;
using System.Collections; public class test1 : MonoBehaviour { // Use this for initialization
void Start ()
{
Debug.Log("in start " + Time.time.ToString());
StartCoroutine(callYieldFunction()); //必须要用StartCoroutine
Debug.Log("in start 2 " + Time.time.ToString());
} // Update is called once per frame
void Update () { } IEnumerator callYieldFunction()
{
Debug.Log("callYieldFunction " + Time.time.ToString());
//yield return StartCoroutine(callYieldFunction1());
StartCoroutine(callYieldFunction1());
yield return new WaitForSeconds();
Debug.Log("callYieldFunction print after 2 seconds " + Time.time.ToString());
} IEnumerator callYieldFunction1()
{
Debug.Log("callYieldFunction1 " + Time.time.ToString());
yield return new WaitForSeconds();
Debug.Log("callYieldFunction print after 4 seconds " + Time.time.ToString());
}
}
运行结果为
in start 0
callYieldFunction 0
callYieldFunction1 0
in start 2 0
callYieldFunction print after 4 seconds 2.004971
callYieldFunction print after 2 seconds 2.004971
测试2:
using UnityEngine;
using System.Collections; public class test1 : MonoBehaviour { // Use this for initialization
void Start ()
{
Debug.Log("in start " + Time.time.ToString());
StartCoroutine(callYieldFunction()); //必须要用StartCoroutine
Debug.Log("in start 2 " + Time.time.ToString());
} // Update is called once per frame
void Update () { } IEnumerator callYieldFunction()
{
Debug.Log("callYieldFunction " + Time.time.ToString());
yield return StartCoroutine(callYieldFunction1());
//StartCoroutine(callYieldFunction1());
yield return new WaitForSeconds();
Debug.Log("callYieldFunction print after 2 seconds " + Time.time.ToString());
} IEnumerator callYieldFunction1()
{
Debug.Log("callYieldFunction1 " + Time.time.ToString());
yield return new WaitForSeconds();
Debug.Log("callYieldFunction print after 4 seconds " + Time.time.ToString());
}
}
运行结果为:
in start 0
callYieldFunction 0
callYieldFunction1 0
in start 2 0
callYieldFunction print after 4 seconds 2.002947
callYieldFunction print after 2 seconds 4.007511
结果:
需要注意的是StartCoroutine(callYieldFunction());这句必须要加StartCoroutine,不然callYieldFunction()里面根本不会运行。
1:StartCoroutine里面的函数是个闭包,主线程运行这个闭包,直到yield return,闭包中剩下的代码不运行,跳出闭包,运行主线程别的代码;
2:主线程在下一帧运行yield return后面的函数(估计是把所有闭包放在一个list里面,每帧的一个特点时间执行list里面的闭包)。
3:整个闭包应该保存了堆栈信息
yield return的作用的更多相关文章
- 可惜Java中没有yield return
项目中一个消息推送需求,推送的用户数几百万,用户清单很简单就是一个txt文件,是由hadoop计算出来的.格式大概如下: uid caller 123456 12345678901 789101 12 ...
- C#中的using和yield return混合使用
最近写代码为了为了省事儿用了几个yield return,因为我不想New一个List<T>或者T[]对象再往里放元素,就直接返回IEnumerable<T>了.我的代码里还有 ...
- C#中的yield return与Unity中的Coroutine(协程)(上)
C#中的yield return C#语法中有个特别的关键字yield, 它是干什么用的呢? 来看看专业的解释: yield 是在迭代器块中用于向枚举数对象提供值或发出迭代结束信号.它的形式为下列之一 ...
- using和yield return
C#中的using和yield return混合使用 最近写代码为了为了省事儿用了几个yield return,因为我不想New一个List<T>或者T[]对象再往里放元素,就直接返回IE ...
- yield return的用法简介
使用yield return 语句可一次返回一个元素. 迭代器的声明必须满足以下要求: 返回类型必须为 IEnumerable.IEnumerable<T>.IEnumerator 或 I ...
- yield学习续:yield return迭代块在Unity3D中的应用——协程
必读好文推荐: Unity协程(Coroutine)原理深入剖析 Unity协程(Coroutine)原理深入剖析再续 上面的文章说得太透彻,所以这里就记一下自己的学习笔记了. 首先要说明的是,协程并 ...
- C#中yield return用法分析
这篇文章主要介绍了C#中yield return用法,对比使用yield return与不使用yield return的流程,更直观的分析了yield return的用法,需要的朋友可以参考下. 本文 ...
- C#中的yield return与Unity中的Coroutine(协程)(下)
Unity中的Coroutine(协程) 估计熟悉Unity的人看过或者用过StartCoroutine() 假设我们在场景中有一个UGUI组件, Image: 将以下代码绑定到Image using ...
- 12.C#yield return和yield break及实际应用小例(六章6.2-6.4)
晚上好,各位.今天结合书中所讲和MSDN所查,聊下yield关键字,它是我们简化迭代器的关键. 如果你在语句中使用了yield关键字,则意味着它在其中出现的方法.运算符或get访问器是迭代器,通过使用 ...
随机推荐
- 李洪强漫谈iOS开发[C语言-050]-doWhile统计用户输入字符
- Linux_文件查看
文件查看 直接查看内容:cat , tac , nl 翻页查看:more , less 指定获取内容:head , tail 查看非纯文字文档:od 文件时间更新与新建:touch cat: 从首行开 ...
- JAVA List<> 合并去重
List<A>和List<B>,A/B中均没有重复的,现在保证A/B合并为C,且C中没有重复的. 参考http://blog.csdn.net/secondjanuary/ar ...
- 常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)
来自:http://www.xueit.com/js/show-6015-1.aspx 本文列出jquery一些应用小技巧,比如有禁止右键点击.隐藏搜索文本框文字.在新窗口中打开链接.检测浏览器. ...
- sign in和sign up区别
如果是网站的话sign up是注册,sign in是登录的意思,另外,sign out退出
- c++ basic 整理2
//拷贝函数 //拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量. //不显式指定拷贝函数时,编译器会生成默认拷贝函数. //使用默认拷贝函数 ...
- find a multiple
Description The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each of ...
- 使用eclipse开发servlet
package cn.itcast; import java.io.IOException; import javax.servlet.GenericServlet; import javax.ser ...
- DOM概述
<!-- DOM:Document Object Model 文档对象模型 用来将标记型文档封装成对象,并将标记型文档中的所有内容(标签,文本,属性等)都封装成对象 封装成对象的目的是为了更为方 ...
- 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
版本:第一版作者:周新稳 杨帅 日期:20160226 =========================== 本资料高清PDF 下载: http://pan.baidu.com/s/1c1uuhLQ ...