c#協程的基本用法


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意味着協程的執行條件被滿足,則能夠從當前的位置繼續往下執行。否則不能從當前位置繼續往下執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM