如何使协同程序按顺序运行?

时间:2017-03-09 03:28:37

标签: c# unity3d

这是使用Unity3D。我有三个协程:GetJSONFromSelectedSubreddit()LoadMoreMemes(),以及一个单独脚本中的函数,它需要能够通过GetNewMemes()函数访问模因数组(必须返回类型Meme [] )。 LoadNewMemes()产生。问题是,LoadMoreMemes()要求json工作,所以他们必须以上述顺序运行。如果您需要这些功能,可以在这里:

public void GetNewMemes(string subReddit, int count)
{
    SetSelectedSubreddit(subReddit);
    memesAtATime = count;
    subJSON = null;
    StartCoroutine(GetJSONFromSelectedSubreddit());
    StartCoroutine(LoadMoreMemes());
}

IEnumerator GetJSONFromSelectedSubreddit()
{
    gettingJSON = true;
    WWW requester = new WWW("https://www.reddit.com/r/" + selectedSub + "/new.json?sort=new&count=25&after=" + postIndex);
    yield return requester;
    subJSON = requester.text;
    json = new JSONObject(subJSON);
    gettingJSON = false;
}

IEnumerator LoadMoreMemes()
{
    while (gettingJSON)
        yield return new WaitForSeconds(0.1f);
    for (int i = 0; i < memesAtATime; i++)
    {
        yield return StartCoroutine(GetUserPostKarma(json["data"]["children"][i]["data"]["author"].str));

        string sourceURL = json["data"]["children"][i]["data"]["preview"]["images"][0]["source"]["url"].str;
        sourceURL = sourceURL.Replace("&amp;", "&");

        yield return StartCoroutine(GrabImage(sourceURL));

        Meme currentMeme = new Meme(
                json["data"]["children"][i]["data"]["preview"]["images"][0]["source"]["url"].str,
                authorPostKarma,
                (int) json["data"]["children"][i]["data"]["score"].i,
                json["data"]["children"][i]["data"]["permalink"].str,
                json["data"]["children"][i]["data"]["title"].str,
                currentBitmap
        );
        Debug.Log(currentMeme.cost);
        memes[i] = currentMeme;
    }
}

这是另一个脚本:

void Start ()
{
    RedditCommunicator redditCommunicator = GetComponent<RedditCommunicator>();
    redditCommunicator.GetNewMemes("me_irl", 1);
    Meme[] memes = redditCommunicator.GetCurrentMemes();
    Debug.Log(memes[0].currentScore);
    redditCommunicator.SpawnOneMeme(memes[0]);
}

每个函数都可以自行运行,但是它们需要等待彼此完成,并且以正确的顺序运行才能工作。我希望这些功能保持独立,以便将来可以单独调用它们。 memes是一个私有变量,我希望传递给另一个调用这些函数的脚本。如果你不认为我已经尝试过我的选择谷歌搜索并自己解决这个问题,请相信我,我已经尽了最大努力。感谢您的帮助。如果您需要更多信息,请问我。这段代码的当前状态是它在协程可以完成之前将memes返回到早期,导致空模因。

2 个答案:

答案 0 :(得分:1)

你可以在IEnumerator中产生一个Coroutine,它将停止Coroutine的进程,直到完成Coroutine。像这样:

  '<input type="submit"  alt="display" value="save" name="save">'; ` 

 <?php

 if(isset($_POST['save']));

  {
// from data
   // insert query
 }

    if(isset($_POST['display']));
   {
   // post form data and disply

  }

   ?>

答案 1 :(得分:-1)

问题是*GetJSONFromSelectedSubreddit方法在LoadNewMemes方法中被称为两个“并行”协程。

如果您不需要“异步”运行协程,您可以通过它进行枚举:

GetNewMemes