首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#等待函数返回产量中断继续

C#等待函数返回产量中断继续
EN

Stack Overflow用户
提问于 2013-08-21 17:29:56
回答 1查看 5.9K关注 0票数 2

我在联合公司工作,我有一个大剧本。在脚本的某个时候,一个协同线,foo将被启动。我希望这个协同器运行另一个IEnumerator函数,bar,但我不希望bar作为协同器开始。相反,我需要foo开始运行,可能会运行几次,调用bar,直到bar完成运行,然后继续运行。目前,我不得不让bar IEnumerable去做:

代码语言:javascript
复制
void Start () {
    StartCoroutine(foo());
}

IEnumerator foo () {
    //Do something up here
    foreach (int x in bar()) {
        yield return null; //Wait for bar to yield break
    }
    //Do more stuff down here
    yield break;
}


IEnumerable bar () {
    for (int x=0; x < 5; x++) {
        //Do Something 5 Times
        yield return x;
    }
    yield break;    
}

我一直在找,但我找不到合适的方法。当然会有超过10个这样的"bar“函数,所以我不想每次调用一个for循环。如何以这种方式调用其他IEnuerator函数?

EN

回答 1

Stack Overflow用户

发布于 2013-08-21 17:42:13

像这样的事怎么样:

代码语言:javascript
复制
class Program
{
    public class CoroutineThing
    {
        public IEnumerator foo()
        {
            //Do something up here
            var nTimesInvoked = 0;
            while (bar(nTimesInvoked++))
                yield return null; //Wait for bar to yield break
            //Do more stuff down here
            yield break;
        }
        bool bar(int nTimesInvoked)
        {
            if (nTimesInvoked < 5)
            {
                Console.WriteLine("Bar: {0}", nTimesInvoked);
                // Do something;
            }
            return nTimesInvoked < 4;
        }
    }
    public static void Main(params string[] args)
    {
        var cor = new CoroutineThing();
        var nFoo = 0;
        var e = cor.foo();
        while (e.MoveNext())
        {
            nFoo++;
            Console.WriteLine("{0} times foo", nFoo);
        }
        Console.ReadLine();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18364005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档