コルーチンの謎
イマイチコルーチンがわからんのでUnityでサンプルコードを書いてみた。
using UnityEngine;
using System.Collections;
public class yieldSample : MonoBehaviour {
void Start () {
YieldTest();
}
void YieldTest()
{
// イテレータでAppleを回す。
foreach(object n in Apple())
{
Debug.Log(n);
Debug.Log("---");
}
}
// コルーチンApple
private IEnumerable Apple()
{
// 無限ループ。ただしiが20になったらブレイクして抜ける。
for(int i = 0 ; true ; i++)
{
// iが20になったらブレイク
if(i == 20) yield break;
// そうでないときはループを一回回すたびにループを中断して元の処理に戻る
yield return i;
}
}
}
引用元はここ。
これって要するにyield returnまでの処理で評価して返す。
ただし実際に中断してるわけじゃないのでガチで無限ループってるといっこうに処理が終わらない。
また返却するのは列挙型なので、単純なオブジェクトじゃない。
したがって手動で何度も呼び出しても意味が無い。
Debug.Log(Apple());
Debug.Log(Apple());
// こうやっても帰ってくるのはオブジェクト列挙型
// 1
// 2
// とかにはならない。
これをどうやって非同期処理につなげてくかはまた次回。
寝たい。