private async Task <ASSET_DIC> LoadAssets(ILoader <object> loading, List <string> resources) { async Task <Tuple <string, AssetRef> > LoadFunc(string path) { var go = await MVP.Framework.Resource.instance.LoadAsync(path, BuildOption(loading)); return(Tuple.Create(path, go)); }; var tasks = new List <IObservable <Tuple <string, AssetRef> > >(); tasks = resources.Aggregate(tasks, (data, it) => { data.Add(ObservableTask.Create(LoadFunc(it))); return(data); }); var results = await tasks.WhenAll(); return(results.ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2)); }
private async Task <Tuple <ASSET_DIC, AsyncOperation> > Load(ILoader <object> loading, List <string> resources) { async Task <Tuple <string, object> > LoadAssetsFunc() { var result = await LoadAssets(loading, resources); return(Tuple.Create("assets", result as object)); }; async Task <Tuple <string, object> > LoadSceneFunc() { var result = await Scene.instance.Load(this.name, BuildOption(loading)); return(Tuple.Create("scene", result as object)); }; var tasks = new List <IObservable <Tuple <string, object> > >(); tasks.Add(ObservableTask.Create(LoadAssetsFunc())); tasks.Add(ObservableTask.Create(LoadSceneFunc())); var loaders = await tasks.WhenAll(); ASSET_DIC assetDic = null; AsyncOperation asyncOperation = null; foreach (var loader in loaders) { if (loader.Item1.Equals("assets")) { assetDic = loader.Item2 as ASSET_DIC; } if (loader.Item1.Equals("scene")) { asyncOperation = loader.Item2 as AsyncOperation; } } return(Tuple.Create(assetDic, asyncOperation)); }