1、作用

协程的作用一共有两点:

  1. 延时执行代码。
  2. 在某项操作完后再执行代码。

就是控制代码在特性的时间执行。

2、协程和线程的区别

  1. 协程不是异步,不需要考虑同步和锁问题
  2. 线程避免了无意义的调度,提高了性能,但需要程序员自己承担调度责任。
  3. 协程无法多核同时进行。

3、C#中的IEnumerator(迭代器)

协程其实就是一个IEnumerator(迭代器),IEnumerator有两个方法和一个属性。
MoveNext():迭代到下一个元素
Reset():重置迭代
Current:返回当前集合中正迭代的一个元素

可枚举的接口 IEnumerable,
GetEnumerator():返回枚举器接口方法。

使用迭代器实现foreach功能

static void Main(string[] args)
{
    int[] arr = new int[5] { 12, 65, 749, 16, 49 };

    //foreach (int item in arr)
    //{
    //    Console.WriteLine(item);
    //}

    IEnumerator e = arr.GetEnumerator(); //获取要迭代的对象
    while (e.MoveNext())  //一个一个的读取元素,读取完会返回false
    {
        Console.WriteLine(e.Current);  //输出读取内容
    }

    Console.ReadKey();
}

IEnumerator方法的用法

void Start () {
    IEnumerator e = TestCoroutine();
    while (e.MoveNext())  //一直读取到有yield的语句才会停止执行下面的代码
    {
        Debug.Log(count++);
        Debug.Log(e.Current);  //输出yield return里面的内容
    }
}
IEnumerator TestCoroutine()
{
    Debug.Log("num1");
    Debug.Log("num1");
    Debug.Log("num1");
    yield return null;
    Debug.Log("num2");
    yield return 2;
    Debug.Log("num3");
    yield return new WaitForSeconds(1);
    Debug.Log("num4");
    yield break;
}
/*输出结果
num1
num1
num1
1
Null
num2
2
2
num3
3
UnityEngine.WaitForSeconds
num4
*/

4、Unity中的协程使用

推荐一篇博客CSDNhuang9012
写的超级好,由于比较长就不搬运了,可以直接去看

最新文章

  1. js正则获取url所带参数值
  2. ID还是普通字段做外键合适?
  3. 图片过大,在div中不压缩的居中方法
  4. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
  5. Linux网卡的相关配置总结
  6. POJ 3468 A Simple Problem with Integers(线段树/区间更新)
  7. 【leetcode】Convert Sorted Array to Binary Search Tree
  8. HDU4870_Rating_双号从零单排_高斯消元求期望
  9. How do you render tooltip on disabled HTML Button
  10. oracle——session
  11. 非XA式Spring分布式事务
  12. sougou输入法小技巧
  13. 用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中
  14. 查看 SELinux状态及关闭SELinux
  15. $.each与$(data).each区别
  16. 循环json数据的列
  17. LINUX文件操作命令
  18. 预先封装数据的思路.md
  19. AET PN结
  20. JSON Web Token(JWT)使用步骤说明

热门文章

  1. css浏览器兼容问题集锦
  2. 《C prime plus (第五版)》 ---第12章 存储类.链接和内存管理
  3. interceptors
  4. Contiki Process概述
  5. Linux bash shell环境变量以及语法规范
  6. Java_泛型_01_T与?
  7. 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd
  8. 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying
  9. The Django Book 2.0--中文版
  10. C++ STL std::wstring_convert处理UTF8