C#协程的用法。

协程:协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行,。

开启协程的两种方式

1、StartCoroutine(string methodName)

注意:

(1)、参数是方法名(字符串类型),此方法可以包含一个参数

(2)、形参方法可以有返回值

2、StartCoroutine(IEnumerator method)

注意:

(1)、参数是方法名(TestMethod()),方法中可以包含多个参数

(2)、IEnumrator 类型的方法不能含有ref或者out 类型的参数,但可以含有被传递的引用

(3)、必须有有返回值,且返回值类型为IEnumrator,返回值使用(yield retuen +表达式或者值,或者 yield break)语句

终止协程的两种方式:

StopCoroutine (string methodName),只能终止指定的协程

使用时注意:

在程序中调用StopCoroutine() 方法只能终止以字符串形式启动的协程

StopAllCoroutine(),终止所有协程

yield:挂起,程序遇到yield关键字时会被挂起,暂停执行,等待条件满足时从当前位置继续执行

yield return 0 or yield return null:程序在下一帧中从当前位置继续执行

yield return 1,2,3,......: 程序等待1,2,3...帧之后从当前位置继续执行

yield return new WaitForSeconds(n):程序等待n秒后从当前位置继续执行

yield new WaitForEndOfFrame():在所有的渲染以及GUI程序执行完成后从当前位置继续执行

yield new WaitForFixedUpdate():所有脚本中的FixedUpdate()函数都被执行后从当前位置继续执行

yield return WWW:等待一个网络请求完成后从当前位置继续执行

yield return StartCoroutine():等待一个协程执行完成后从当前位置继续执行

yield break

如果使用yield break语句,将会导致协程的执行条件不被满足,不会从当前的位置继续执行程序,而是直接从当前位置跳出函数体,回到函数的根部

协程的执行原理

协程函数的返回值时IEnumerator,它是一个迭代器,可以把它当成执行一个序列的某个节点的指针,它提供了两个重要的接口,分别是Current(返回当前指向的元素)和MoveNext()(将指针向后移动一个单位,如果移动成功,则返回true)

yield关键词用来声明序列中的下一个值或者是一个无意义的值,如果使用yield return x(x是指一个具体的对象或者数值)的话,那么MoveNext返回为true并且Current被赋值为x,如果使用yield break使得MoveNext()返回为false

如果MoveNext函数返回为true意味着协程的执行条件被满足,则能够从当前的位置继续往下执行。否则不能从当前位置继续往下执行。

时间: 2024-09-28 22:25:01

C#协程的用法。的相关文章

谁说Python协程是鸡肋的!站出来我不打死他!这么牛逼的协程!

文章思路:本文将先介绍协程的概念,然后分别介绍Python2.x与3.x下协程的用法,最终将协程与多线程做比较并介绍异步爬虫模块. 协程 概念 协程,又称微线程,纤程,英文名Coroutine.协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换).但这一过程并不是函数调用(没有调用语句),这一整个过程看似像多线程,然而协程只有一个线程执行. 进群:548377875   即可获取数十套PDF哦! Python2.x协程 python2.x协程应用: y

Python异步IO之协程(一):从yield from到async的使用

引言:协程(coroutine)是Python中一直较为难理解的知识,但其在多任务协作中体现的效率又极为的突出.众所周知,Python中执行多任务还可以通过多进程或一个进程中的多线程来执行,但两者之中均存在一些缺点.因此,我们引出了协程. Tips 欲看完整代码请见:我的GitHub 为什么需要协程?首先,我们需要知道同步和异步是什么东东,不知道的看详解.简单来说:[同步]:就是发出一个“调用”时,在没有得到结果之前,该“调用”就不返回,“调用者”需要一直等待该“调用”结束,才能进行下一步工作.

Python核心技术与实战——十五|Python协程

我们在上一章将生成器的时候最后写了,在Python2中生成器还扮演了一个重要的角色——实现Python的协程.那什么是协程呢? 协程 协程是实现并发编程的一种方式.提到并发,肯很多人都会想到多线程/多进程模型,这就是解决并发问题的经典模型之一.在最初的互联网世界中,多线程/多进程就在服务器并发中起到举足轻重的作用. 但是随着互联网的发展,慢慢很多场合都会遇到C10K瓶颈,也就是同时连接到服务器的客户达到1W,于是,很多代码就跑崩溃,因为进程的上下文切换占用了大量的资源,线程也顶不住如此巨大的压力

关于gevent的协程间通信及队列和事件event用法

前言: 今天就写点gevent的高级点的用法,对于我来说 这些也是常用的gevent模块. gevent的AsyncResutl模块的用途,看字眼的意思是一个异步的任务的结果. 其实官方的说法也让人有些发蒙.  其实说白了就是协程间的通信,我是老板,让大哥和小弟同事去收账,小弟做完了后,会等大哥来问话. 如果小弟没有完成,还在做着事情,那大哥会在一个时间里,等待小弟返回结果.一直等 ! 在实战中这个就很有意思了.   我们同时做一个事情,但是我们又需要互相的帮助,或者是互相的通信.  这个时候就

Unity中的协程用法以及注意事项

前沿:这章节,将简单的总结一下如何开启协程,关闭协程,以及使用协程的注意事项. 一.如何开启协程: private void Start() { m_SpherePrefab = Resources.Load<GameObject>("Test/Sphere_00"); Debug.Log("m_SpherePrefab = " + m_SpherePrefab); #region 协程的学习及使用 StartCoroutine(Test_00());

Lua-Async 协程的高级用法

Lua-Async 这是一个基于协程的异步调用库, 该库的设计思路类似JavaScript的Promise, 但相比Promise, 它有更多的灵活性. -- 引入Async local Async = require("Async") -- 创建Async -- 可传递参数到接下来的调用中 Async.New(...) -- 注册异步调用 Async.New(...) :Ok(function(ok, no, ...) return no() end) -- 在Ok管道注册回调, 之

python并发编程之---协程

1.什么是协程 协程:是单线程下的并发,又称微线程,纤程. 协程是一种用户态的轻量级线程,协程是由用户程序自己控制调度的. 2.需要注意的点: 需要强调的是: #1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其他线程运行) #2. 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换,以此来提升效率(!!!非io操作的切换与效率无关) 对比操作系统控制线程的切换,用户在单线程内控制协程的切换 优点

Python基础—线程、进程和协程

今天已是学习Python的第十一天,来干一碗鸡汤继续今天的内容,今天的鸡汤是:超越别人对你的期望.本篇博客主要介绍以下几点内容: 线程的基本使用: 线程的锁机制: 生产者消费之模型(队列): 如何自定义线程池: 进程的基本使用: 进程的锁机制: 进程之间如何实现数据共享: 进程池: 协程的基本使用. 一.线程 1.创建线程 上篇博客已经介绍过如何创建多线程的程序,在这里在复习一下如何创建线程过程以及线程的一些方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

进程线程协程那些事儿

一.进程与线程 1.进程 我们电脑的应用程序,都是进程,假设我们用的电脑是单核的,cpu同时只能执行一个进程.当程序出于I/O阻塞的时候,CPU如果和程序一起等待,那就太浪费了,cpu会去执行其他的程序,此时就涉及到切换,切换前要保存上一个程序运行的状态,才能恢复,所以就需要有个东西来记录这个东西,就可以引出进程的概念了. 进程就是一个程序在一个数据集上的一次动态执行过程.进程由程序,数据集,进程控制块三部分组成.程序用来描述进程哪些功能以及如何完成:数据集是程序执行过程中所使用的资源:进程控制