首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >统一CoRoutine与回调数据同步

统一CoRoutine与回调数据同步
EN

Stack Overflow用户
提问于 2015-07-03 19:26:44
回答 1查看 781关注 0票数 0

我必须从互联网上拿出许多图片,并把它们显示在正确的所有者名字旁边。我有一个纹理数组,以及相应的所有者ID。

首先,我必须使用所有者的ID调用一个API函数来获取其图片的URL,然后在该URL中获取图片。

下面是c#统一伪代码:

代码语言:javascript
运行
复制
 void function() {
    for (int i=0; i<10; i++) {
       start_fetch_url(picID[i],CallBack); // fetch URL of picID, via call back 
    }
 }

 // when url is received this is called, then fetch pic at that URL
 IEnumerator CallBack(string url)
 {
    WWW fetchPic= new WWW(url);
    while (fetchPic.isDone) {
      yeild return new WaitForSeconds(0.1f);
    }
    texture[????]=fetchPic.texture; '// <--- here is problem, which texture
 }

我不能更改start_fetch_url API,因为我没有编写它,也没有访问它的权限。

start_fetch_url还可以访问互联网,从远程数据库获取基于ID的url。

问题: 1. start_fetch_url按随机顺序将URL返回给回调函数,因此我无法判断url用于哪种纹理。

  1. 也许我必须同时等待每个URL,然后我才能知道它的纹理,但是如何编写代码呢?
  2. 有什么办法不等待吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-07-04 10:28:49

如果您不能更改start_fetch_url,并且无法根据传递给您的协同服务的url推断用户id,我认为唯一的方法是按顺序下载图像。

您可以通过将用户索引保存在一个类变量中来实现这一点,并且只有在您的coroutine被调用时才转到下一张图片。

代码语言:javascript
运行
复制
var index = 0;

function load_next()
{
 //we've reached the end
 if( index == 10 )
 {
  return;
 }

 start_fetch_url(picID[i],CallBack);
}

// when url is received this is called, then fetch pic at that URL
IEnumerator CallBack(string url)
{
  WWW fetchPic= new WWW(url);

  while (fetchPic.isDone) 
  {
   yield return new WaitForSeconds(0.1f);
  }

  texture[index]=fetchPic.texture; 

  //continue with the fetching
  index++;
  load_next();
}

注意:您不需要通过轮询来检查下载是否已经结束,只需调用yield return fetchPic;即可。如果您需要显示一个进度条,那么您需要像现在一样使用时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31213138

复制
相关文章

相似问题

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