等待所有请求继续 并行等待多个WebRequest

请,此代码可以异步完成吗?我遇到了问题,因为所有请求都必须在代码继续之前终止,我看到了如何等待一个孤立的请求,但是后来我无法使用循环,如果有人可以的话,我已经尝试解决了一段时间。帮我,那太好了。

StartCoroutine(GetTexture());    

IEnumerator GetTexture() {

    for (int i = 0; i < 10; i++)
    {
        string url = string.Format("https://galinha.webhost.com/img/{0}.jpg",words[i]);
        UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
        yield return www.SendWebRequest();

        if(www.isnetworkError || www.isHttpError) {
            selectionSprites.Add(sprites[i]);
        }
        else {
            Texture2D myTexture = ((DownloadHandlerTexture)www.downloadHandler).texture;
            Sprite spriteFromWeb = Sprite.Create(myTexture,new Rect(0,myTexture.width,myTexture.height),new Vector2(0,0));
            selectionSprites.Add(spriteFromWeb);  
        }

    }//for
xxd1111 回答:等待所有请求继续 并行等待多个WebRequest

  

此代码可以异步完成吗?

请注意,async是关键字,在这里有点误导。当然,您可以进行网络请求等async,但是由于大多数Unity API不能在线程上使用,因此代码将完全不同...

Coroutines从来都不是async,而是仍然在主线程中运行,就像它们是临时的Update方法一样。实际上,{@ {1}}对协程的调用是在MoveNext之后完成的。


并行等待多个WebRequest

所以我想您的意思是

  

可以并行等待这些请求吗?

最理想的解决方案是,您无需在代码结构上进行太多更改的地方就是存储所有UnityWebRequestAsyncOperationSendWebRequest返回的数组和{{1} },直到所有人都像{3>

Update

出于完整性考虑:isDoneWaitUntil

,

我尝试将StarCoroutine放入循环中,但不起作用,它甚至一方面起作用,导致程序等到最后一个Startcoroutine,但不要等到最后一个完成,并且还运行了所有Webrequest同时,不尊重秩序到底。我本可以尝试将Inumerator与Coroutine一起放入循环中,以查看其行为,但是我不知道。

我也使用System.Linq和UnityWebRequestAsyncOperation []尝试了上面的脚本,但是它表现出与我的原始脚本类似的行为,但我仍然无法使程序等待所有协程。

最后,我只是在前一个场景中提出了请求,并加载了一个静态列表以在必要时使用,因此我认为游戏的工作更加流畅。

感谢所有帮助。

本文链接:https://www.f2er.com/3113809.html

大家都在问