Chinaunix首页 | 论坛 | 博客
  • 博客访问: 170019
  • 博文数量: 25
  • 博客积分: 548
  • 博客等级: 中士
  • 技术积分: 229
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-11 18:48
文章分类

全部博文(25)

文章存档

2012年(2)

2011年(23)

分类: 嵌入式

2011-07-20 14:24:49

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
阅读(6915) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~