免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 894 | 回复: 0
打印 上一主题 下一主题

Yield使用方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览
C#中Yield使用方法小结,可能理解的不正确,后续修改。
yield return可以看做是一种特殊的return,会返回到父类继续执行,但是yield return后面的类型或方法会有一个执行条件,当条件满足时会回调包含yield的子函数,例如下面代码
例1:
  1. void Start () {
  2.         print("Starting:" + Time.time);
  3.         StartCoroutine(WaitAnPrint(2.0F));
  4.         print("Before WaiAndPrint:" + Time.time);
  5.     }
  6. IEnumerator WaitAndPrint(float waitTime)
  7.     {
  8.         yield return new WaitForSeconds(waitTime);
  9.         print("WaitAndPrint:" + Time.time);    
  10.     }

在执行yield return new WaitForSeconds(waitTime)时暂停的条件没有满足,故返回到start函数中继续执行,直到满足条件后再回调WaitAndPrint,所以输出为:

  1. Starting:0
  2. Before WaiAndPrint:0
  3. WaitAndPrint:2.12291

例2:

  1. IEnumerator Start()
  2.     {
  3.         print("starting:" + Time.time);
  4.         yield return StartCoroutine(WaitAndPrint(2.0F));
  5.         print("done:" + Time.time);
  6.     }
  7. IEnumerator WaitAndPrint(float waitTime)
  8.     {
  9.         yield return new WaitForSeconds(waitTime);
  10.         print("WaitAndPrint:" + Time.time);    
  11.     }

因为start为顶级函数,所以会阻塞在这里,直到StartCoroutine(WaitAndPrint(2.0F))执行完毕,输出为:

  1. starting:0
  2. WaitAndPrint:2.00315
  3. done:2.00315
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP