スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C#で関数の途中で処理を中断→再開する方法

ループ処理の最中でメインスレッドの流れを止めずにある関数を中断しておきたいことはたまにありますよね?
俗にいうコルーチンってやつですな。

このような時、C#ではyieldってものを使って実装できるっぽい!

早速調べてみたのでサンプルを。
こんな感じにIEnumerator を返す関数をコルーチンのように見立てて利用。
        static IEnumerator TestAction = GetTestAction();
static IEnumerator GetTestAction()
{
while (true)
{
Console.WriteLine("1");
yield return null;
Console.WriteLine("2");
yield return null;
Console.WriteLine("3");
yield return null;
}
}

上記を使う時はループ処理の中でこんなかんじに。
            while (true)
{
Console.Write("A");
TestAction.MoveNext();
Thread.Sleep(1000);
}


実行すると1秒ごとに
A1
A2
A3
A1
A2
A3

とちゃんと表示されてますね。
結構便利?!
try catchの中では使えないみたいなのでご注意を。


実行する手順は決まってるけどあるステータスの時だけ処理を止めたい・・・でもメインの流れを止めたくない・・・。
そん時に便利な機能だと思います!
実際に使う時はこんな感じになるのかな
        static IEnumerator TestAction = GetTestAction();
static IEnumerator GetTestAction()
{
while (true)
{
startAction();
while (state == hoge)//一定の状態の場合は待機
{
yield return null;
}
endAction();
yield return null;
}
}


ねよっと。
スポンサーサイト
プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。