淺析unity/xlua中的協程實現
阿新 • • 發佈:2018-12-17
internal class Test { // GetCounter獲得結果就是返回一個例項物件 private static IEnumerator GetCounter() { return new <GetCounter>d__0(0); } // Nested type automatically created by the compiler to implement the iterator [CompilerGenerated] private sealed class <GetCounter>d__0 : IEnumerator<object>, IEnumerator, IDisposable { // Fields: there'll always be a "state" and "current", but the "count" // comes from the local variable in our iterator block. private int <>1__state; private object <>2__current; public int <count>5__1; [DebuggerHidden] public <GetCounter>d__0(int <>1__state) { //初始狀態設定 this.<>1__state = <>1__state; } // Almost all of the real work happens here //類似於一個狀態機,通過這個狀態的切換,可以將整個迭代器執行過程中的堆疊等環境資訊共享和儲存 private bool MoveNext() { switch (this.<>1__state) { case 0: this.<>1__state = -1; this.<count>5__1 = 0; while (this.<count>5__1 < 10) //這裡針對迴圈處理 { this.<>2__current = this.<count>5__1; this.<>1__state = 1; return true; Label_004B: this.<>1__state = -1; this.<count>5__1++; } break; case 1: goto Label_004B; } return false; } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } void IDisposable.Dispose() { } object IEnumerator<object>.Current { [DebuggerHidden] get { return this.<>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return this.<>2__current; } } } }